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 的结果。内连接和或左连接查询得到大约 190k 的结果。还有另一种方法可以做到这一点吗?

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 是否为空 这是工作小提琴:http ://sqlfiddle.com/#!2/c2a9c/1/0

欲了解更多信息:http ://dev.mysql.com/doc/refman/5.0/en/outer-join-simplification.html

于 2012-08-28T19:18:57.130 回答
0

您需要像这样使用 LEFT JOIN 而不是 INNER 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

注意我还删除了你的 where 子句,因为这是在 pics 表中寻找一个会限制结果集的值。

于 2012-08-28T19:19:11.983 回答