左結合 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