0

製品情報と写真がある場合は、製品情報と写真を取得するクエリを作成しようとしています。

select
    prod.pID, prod.Manufacturer_Name, prod.pUPC, prod.pNum, prod.pPrice, prod.pSalesPrice, prod.pSalesDate, prod.pSalesEndDate, prod.pSale,
    GROUP_CONCAT(photoName) as photos
from
    ds_products as prod
    inner join ds_photos as pics on pics.objectID=prod.pID
where
   pics.photoFlag =2
group by 
   prod.pID

これに関する問題は、写真のない製品が結果セットから除外されることです。写真の表に表示されない製品が結果に表示されるようにするには、何を追加または変更する必要がありますか?

ありがとう

編集

内部の代わりに LEFT JOIN を試しましたが、同じ結果セットが得られました。私がちょうど実行した場合:

select
    prod.pID, prod.Manufacturer_Name, prod.pUPC, prod.pNum, prod.pPrice, prod.pSalesPrice, prod.pSalesDate, prod.pSalesEndDate, prod.pSale
from
    ds_products as prod

約600kの結果が得られます。内部結合クエリと左結合クエリでは、約 190,000 の結果が得られます。これを行う別の方法はありますか?

4

2 に答える 2

2

外部結合を使用する

select
    prod.pID, prod.Manufacturer_Name, prod.pUPC, prod.pNum, prod.pPrice, prod.pSalesPrice, prod.pSalesDate, prod.pSalesEndDate, prod.pSale,
    GROUP_CONCAT(photoName) as photos
from
    ds_products as prod
    LEFT join ds_photos as pics on pics.objectID=prod.pID
where
   pics.photoFlag =2 OR pics.photoFlag is NULL
group by 
   prod.pID

対応する写真がない製品について、photoFlag が null かどうかをチェックする条件を追加しました

詳細については、http: //dev.mysql.com/doc/refman/5.0/en/outer-join-simplification.htmlを参照してください。

于 2012-08-28T19:18:57.130 に答える
0

このように INNER JOIN の代わりに LEFT JOIN を使用する必要があります

select
    prod.pID, prod.Manufacturer_Name, prod.pUPC, prod.pNum, prod.pPrice, prod.pSalesPrice, prod.pSalesDate, prod.pSalesEndDate, prod.pSale,
    GROUP_CONCAT(photoName) as photos
from
    ds_products as prod
    LEFT JOIN ds_photos as pics on pics.objectID=prod.pID
group by 
   prod.pID

結果セットを制限する pics テーブルの値を探していたため、 where 句も削除したことに注意してください。

于 2012-08-28T19:19:11.983 に答える