1

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

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

这是我提出的从已删除产品中获取图像的查询。我只是不确定如何让查询检查该产品是否被任何注释删除的产品使用。我宁愿不必对该检查进行另一个查询,因为我在数据库中有超过 750000 种产品。

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

3 回答 3

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
于 2012-11-21T21:09:03.390 回答
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但未被删除的记录的计数
于 2012-11-21T21:16:35.960 回答
0

这行得通吗?

SELECT DISTINCT ImageId 
FROM productdata pd
WHERE (
    SELECT COUNT(*) FROM productdata 
    WHERE pd.ImageId != ImageId AND Deleted IS NOT NULL
) = 0
于 2012-11-21T21:06:19.897 回答