我有一堆文章
+-----------+-------+
| ArticleID | Name |
+-----------+-------+
| 1 | Bla |
| 2 | Blub |
| 3 | Test |
+-----------+-------+
和产品组:
+-----------+--------------+
| ProductGroupID | Name |
+-----------+--------------+
| 4 | Group A |
| 5 | Group B |
| 6 | Group C |
+-----------+--------------+
以及将文章与产品组链接的链接表(M:N 关系(。每篇文章可以同时出现在多个产品组中,但每个组只能包含一次:
+-----------+----------------+
| ArticleID | ProductGroupID |
+-----------+----------------+
| 1 | 4 |
| 1 | 5 |
| 2 | 5 |
| 2 | 6 |
| 3 | 4 |
| 3 | 6 |
+-----------+----------------+
我的问题是现在我需要一个查询,让我找到ID 为 4 的产品组中缺少的文章。 通常我会编写一个PHP脚本,循环整个表并检查值并记住是否找不到产品组ID 4。
但这似乎非常复杂和烦人,因为我经常在这里和那里有这种szenario。
我不能使用 WHERE 产品组 ID 不在 (4( 中,因为当文章分配给其他产品组时,它会发现行和 结果不会告诉我文章是否属于这个特定组。
结果只需要给我!!文章 ID: 2 因为它不在 ID 为 4 的产品组中
我感谢任何有用的建议!
一个选项,使用存在逻辑:
SELECT a.Name
FROM articles a
WHERE NOT EXISTS (SELECT 1 FROM link l
WHERE l.ArticleID = a.ArticleID AND l.ProductGroupID = 4);
用简单的英语阅读,上面的查询说返回我们在与ProductGroupID = 4
关联的链接表中找不到条目的文章名称。