我有两张包含相关信息的表格。 “RoodCMS_prodQuants”和“RoodCMS_albums”。这些看起来如下:
RoodCMS_prodQuants:
此表是产品数量表。组合idnr-prodID是唯一的。 idnr是指另一个表中订单的ID,prodID是指“RoodCMS_albums”中的idnr
-------------------------------------------------
idnr | prodID | kwantiteit
------------------------------------------------
2 | 2 | 2
3 | 1 | 1
4 | 1 | 2
4 | 2 | 2
5 | 3 | 1
RoodCMS_albums:
出于管理目的,我只删除这里的记录,如果它被标记为“待删除”(gepubliceerd =' - 1'),并且如果在上一个表中没有与之相关的条目(记录)来自RoodCMS_prodQuants,其中prodID为RoodCMS_albums中的idnr)。那是因为我想保留价格,名称等信息,直到包含该产品的最后一个订单被删除。
-------------------------------------------------------------------
idnr | gepubliceerd | ... name, price, quantity-in-stock, etc...
-------------------------------------------------------------------
2 | 1 |
3 | 1 |
4 | -1 | <---- this one is flagged to be deleted
1 | 1 |
在这种情况下,我想选择在同一prodID下没有任何相应记录的每条记录的idnr。对于我在这里显示的表格,这意味着idnr ='4'是要选择的候选者,因为没有prodID ='4'的记录。
我尝试了几个查询来收集符合我标准的记录。
SELECT r1.idnr
FROM RoodCMS_albums AS r1, RoodCMS_prodQuants AS r2
WHERE r1.gepubliceerd='-1' AND r1.idnr = r2.prodID
GROUP BY r1.idnr HAVING SUM(r1.kwantiteit) = 0
......和:
SELECT r1.idnr
FROM RoodCMS_albums AS r1, RoodCMS_prodQuants AS r2
WHERE r1.gepubliceerd='-1' AND r1.idnr = r2.prodID
GROUP BY r1.idnr HAVING COUNT(r2.prodID) = 0
两者都返回一组空行,而我的目标是从RoodCMS_albums中选择idnr ='4'。有人可以帮我写一个确实返回我想要的结果的查询吗?
提前致谢!
答案 0 :(得分:1)
您需要left outer join
(或not in
或not exists
)。您应该学会使用正确的,明确的join
语法 - 当遇到这样的问题时,这样的习惯会对您有所帮助。查询更像是:
SELECT r1.idnr
FROM RoodCMS_albums r1 LEFT JOIN
RoodCMS_prodQuants r2
ON r1.idnr = r2.prodID
WHERE r1.gepubliceerd = '-1' and r2.ProdId is NULL;