我正在编写一个php脚本来查询我的数据库中标记为已删除的产品,获取图像参考编号并删除该图像。问题是我有一些图像被多个产品使用,其中只有一些被删除。所以我需要一个查询来查找已删除产品的所有唯一图像编号,但前提是它们不被未删除的产品使用。
每个产品都有一个unquieID,ImageID和Deleted(如果没有删除则为null,如果删除则包含7或8位数字)列。
以下是我提出的用于从已删除产品中获取图片的查询。我只是不确定如何查询查看该产品是否被任何笔记删除产品使用。我宁愿不再为该检查做另一个查询,因为我在数据库中有超过750000个产品。
SELECT DISTINCT ImageId
FROM productdata
WHERE ImageId != 0
AND Deleted IS NOT NULL
答案 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