【问题标题】:MySQL: select table records where related table has empty matchMySQL:选择相关表有空匹配的表记录
【发布时间】:2014-10-13 18:51:17
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: mysql matching multiple-tables not-exists


    【解决方案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;
    

    【讨论】:

    • 感谢您编写更好的查询。这确实有效。另外,感谢您的建议!我会深入研究的! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多