跪left join 的sql语句写法

WBOY
リリース: 2016-06-13 10:51:22
オリジナル
1025 人が閲覧しました

跪求一个left join 的sql语句写法
表goods: gid | name 
  1 xde
  2 dfdd
  3 东方古国风格
表glist: lid | gid | subname | displayorder
  1 1 三三四四 2
  2 1 扫扫地 12  
  3 2 日方非法 10
  4 2 到噶多个 1
我现在想取出glist表中的lid为2,3两项。
但是SELECT g . * , f . * FROM goods g LEFT JOIN glist f ON g.gid = f.gid ORDER BY g.displayorder DESC limit 2 这个sql取出的结果是错误的。

按照goods中的gid升序 取出两条 同时也取出在glist中属于相应gid的一条(取displayorder值最大的一个)
结果应为goods中的1,2 同时也取出glist中的2,3

------解决方案--------------------
可以这么写select a.*,max(b.displayorder),b.subname from goods as a left join glist as b on a.gid=b.gid group by a.gid
分组查询displayorder字段最大值
------解决方案--------------------
SELECT g . * , f . * FROM goods g LEFT JOIN glist f ON g.gid = f.gid ORDER BY f.displayorder DESC limit 2

你的sql有问题,不是g,是f。但是这样不能满足你以下要求
“按照goods中的gid升序 取出两条 同时也取出在glist中属于相应gid的一条(取displayorder值最大的一个)
结果应为goods中的1,2 同时也取出glist中的2,3”

楼上也是错的,虽然max(b.displayorder)取出来是对的,但是b.subname不对。

正确的应该是:
select * from (select g.gid, g.name, f.lid,f.subname,f.displayorder from goods g left join glist f on g.gid=f.gid order by g.gid ASC, f.displayorder DESC) h group by h.gid LIMIT 2

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!