1

データベースに2つのテーブルがあります。1つは商品用で、もう1つは商品画像用です。1つのクエリで商品の画像と情報を取得できるように、テーブルを結合しています。

SELECT * 
from items left join images 
     on items.item_id = images.item_id and 
        items.display_items = '1' and items.active = '1' 
order by items.item_year desc, items.fullname desc, images.position asc

しかし、すべての製品が表示されていないことに気づきました。一部の商品には画像がなく、表示されていない商品もあります。Sequel Proでクエリを実行したところ、列item_idが2回表示されていることがわかりました。1回はidで、もう1回はNULL。です。クエリを修正してすべての製品を取得するにはどうすればよいですか?

4

2 に答える 2

2

「select *」を使用するのではなく、結果に必要な正確な列を指定するようにクエリを修正します。この場合、2 つのテーブルに同じ名前の列 ("item_id" など) が含まれている可能性があり、これにより "select *" で問題が発生する可能性があります。

また、ON ステートメントの 2 行目を WHERE 句に入れます。「items.display_items = '1' and items.active = '1'」は結合には適用されませんが、必要なアイテムのセットには適用されます。

改訂されたクエリ:

SELECT --explicit list of columns 
from items 
    left join images 
    on items.item_id = images.item_id  
WHERE items.display_items = '1' and items.active = '1' 
order by items.item_year desc, items.fullname desc, images.position asc
于 2012-04-22T02:56:17.317 に答える
0

WHERE 句がありません。からのデータのみが必要であると仮定してitems、これを試してください:

SELECT it.* 
FROM items it
LEFT JOIN images im 
ON it.item_id = im.item_id
WHERE it.display_items = '1' and it.active = '1' 
ORDER BY it.item_year desc, it.fullname desc, im.position asc
于 2012-04-22T02:57:22.200 に答える