MySQL:选择相关表空匹配的表记录

时间:2014-08-20 12:07:57

标签: mysql matching multiple-tables not-exists

我有两张包含相关信息的表格。 “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'。有人可以帮我写一个确实返回我想要的结果的查询吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要left outer join(或not innot 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;