mySQL union 允许不匹配

标签 mysql

我正在尝试编写一个查询,该查询将提取一些产品信息和照片(如果产品有的话)。

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/

相关文章:

php - SQL从其他表中给定时间戳后的记录中选择

mysql - Powershell - 将日期格式修改为 CSV 列中的值

mysql - 为具有前 3 个计数的列获取表的列名

php - 我应该如何管理这个数据库?

mysql - 在sql中合并2个或多个表

php - ajax调用后Json没有返回

mysql - 在mysql中使用单个关键字从多个表中搜索

mysql - MySQL 中的逻辑或

mysql - 如何更新实际上在其父级中具有唯一 id 重复项的外键字段?

mysql - 存储过程中的 DML 是否在单个事务中运行?