我正在尝试编写一个查询,该查询将提取一些产品信息和照片(如果产品有的话)。
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 个结果。还有其他方法可以做到这一点吗?
最佳答案
使用外连接
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 是否为空 这是工作 fiddle :http://sqlfiddle.com/#!2/c2a9c/1/0
了解更多信息:http://dev.mysql.com/doc/refman/5.0/en/outer-join-simplification.html
关于mySQL union 允许不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165999/