MySQL Query Select Distinct Where

时间:2012-11-21 20:59:13

标签: php mysql

我正在编写一个php脚本来查询我的数据库中标记为已删除的产品,获取图像参考编号并删除该图像。问题是我有一些图像被多个产品使用,其中只有一些被删除。所以我需要一个查询来查找已删除产品的所有唯一图像编号,但前提是它们不被未删除的产品使用。

每个产品都有一个unquieID,ImageID和Deleted(如果没有删除则为null,如果删除则包含7或8位数字)列。

以下是我提出的用于从已删除产品中获取图片的查询。我只是不确定如何查询查看该产品是否被任何笔记删除产品使用。我宁愿不再为该检查做另一个查询,因为我在数据库中有超过750000个产品。

SELECT DISTINCT ImageId 
FROM productdata 
WHERE ImageId != 0 
    AND Deleted IS NOT NULL

3 个答案:

答案 0 :(得分:2)

这样的事情怎么样?计算图像总数,并计算删除的次数。如果删除计数与图像计数匹配,则图像产品的所有实例都已删除。

SELECT 
  ImageID, 
  COUNT(ImageID) AS total_images, 
  SUM(Deleted IS not NULL) AS deleted_images
FROM productData
GROUP BY ImageID
HAVING total_images = deleted_images

答案 1 :(得分:2)

尝试使用此查询:

SELECT ImageId
FROM productdata 
WHERE ImageId != 0 
GROUP BY ImageId
HAVING sum(CASE WHEN Deleted is null THEN 1 ELSE 0 end) = 0

您可以在线测试:http://www.sqlfiddle.com/#!2/15229/2

工作原理:

  • GROUP BY ImageId可确保我们获得不同的ImageId
  • sum(CASE WHEN Deleted is null THEN 1 ELSE 0 end)是具有未删除的给定ImageId的记录数

答案 2 :(得分:0)

这有用吗?

SELECT DISTINCT ImageId 
FROM productdata pd
WHERE (
    SELECT COUNT(*) FROM productdata 
    WHERE pd.ImageId != ImageId AND Deleted IS NOT NULL
) = 0