ひざまずき左結合のSQL文の書き方

WBOY
リリース: 2016-06-13 13:11:09
オリジナル
1695 人が閲覧しました

左結合 SQL ステートメントをお願いします。
テーブル商品: gid | name
1 xde
2 dfdd
3 東洋の古代カントリー スタイル
テーブル glist: lid 1 1 Three Three Four Four 2
2 1 床を掃除する 12
3 2 日本語違法 10
4 2 複数到着 1
今、グリストテーブルの 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 の結果は間違っています。

商品の gid の昇順に従って、2 つのアイテムを取り出し、glist 内の対応する gid に属するアイテムも取り出します (displayorder 値が最大のものを取り出します)
結果は次のようになります。商品の 1、2 と、


の 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

g ではなく f に問題があります。 。しかし、これでは以下の要件を満たすことができません
「goods の gid の昇順に 2 つの項目を取り出し、さらに glist の対応する gid に属するものを取り出します (displayorder 値が最大のものを取り出します)
結果Goods では 1 のはずですが、同時に 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 学習者の迅速な成長を支援します!