1

次のことを行う SQL クエリに問題があります。

製品テーブルからすべての製品を選択する必要があり、製品ごとに画像テーブルからメイン画像 (すべての列) を結合する必要があります。製品画像テーブルには、画像と製品の関係と列 sortWeight が含まれています。メインの画像は、sortWeight が最小の画像です。

メインの製品画像を取得するには、次のようにします。

SELECT * FROM images WHERE product=SOME_PRODUCT ORDER BY sortWeight ASC LIMIT 1;

すべての製品を取得するには:

SELECT * FROM products;

今、私は何とかこれら2つに参加する必要がありますが、問題は、次の制限を回避する方法がわからないことです:

SELECT P.* FROM products AS P 
LEFT JOIN 
    (SELECT * FROM images AS I WHERE I.product=P.id ORDER BY sortWeight ASC LIMIT 1) AS I1

問題は、MySQL がサブクエリ内の P.id を認識していないことです。私も次のように試しました:

SELECT P.* FROM products AS P 
LEFT JOIN 
    (SELECT * FROM images AS I WHERE ORDER BY sortWeight ASC LIMIT 1) AS I1 ON (I1.product = P.id)

しかし、サブクエリには制限があり、sortWeightが小さい別の製品から画像を選択する可能性があるため、これは正確な結果をもたらすとは思いません。

誰かがこれを書き直すのを手伝ってくれますか? ありがとうございました。

4

1 に答える 1

5

minそれぞれに対して最小の () sortWeight を持つ画像を返すサブクエリに結合してみてくださいproduct

これは、各製品の最小の sortWeight を返します。

select product, min(sortWeight) as sortWeight
from images
group by product

これは結合されたバージョンです:

SELECT P.*, i.*
FROM products AS P 
left join images as i on p.id = i.product
LEFT JOIN (
    select product, min(sortWeight) as sortWeight
    from images
    group by product
) t on t.product = i.product and i.sortWeight = t.sortWeight
于 2012-11-20T14:22:54.650 に答える