MySQL 复杂的排除查询
MySQL complicated exclude query
我有一堆文章
+-----------+-------+
| ArticleID | Name |
+-----------+-------+
| 1 | Bla |
| 2 | Blub |
| 3 | Test |
+-----------+-------+
和产品组:
+-----------+--------------+
| ProductGroupID | Name |
+-----------+--------------+
| 4 | Group A |
| 5 | Group B |
| 6 | Group C |
+-----------+--------------+
还有 link table(M:N 关系)links 文章与产品组。每篇文章可以同时出现在多个产品组中,但每个组只能出现一次:
+-----------+----------------+
| ArticleID | ProductGroupID |
+-----------+----------------+
| 1 | 4 |
| 1 | 5 |
| 2 | 5 |
| 2 | 6 |
| 3 | 4 |
| 3 | 6 |
+-----------+----------------+
我现在的问题是我需要一个查询来找出 ID 为 4 的产品组中缺少的文章。
通常我会写一个 PHP 脚本来循环整个 table 并检查值并记住是否找不到 product-group-id 4。
但这似乎非常复杂和烦人,因为我经常遇到这种情况。
我不能使用 WHERE ProductGroupID NOT IN(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);
用简单的英语阅读,上面的查询告诉 return 我们在与 ProductGroupID = 4
关联的 link table 中找不到条目的文章名称.
我有一堆文章
+-----------+-------+
| ArticleID | Name |
+-----------+-------+
| 1 | Bla |
| 2 | Blub |
| 3 | Test |
+-----------+-------+
和产品组:
+-----------+--------------+
| ProductGroupID | Name |
+-----------+--------------+
| 4 | Group A |
| 5 | Group B |
| 6 | Group C |
+-----------+--------------+
还有 link table(M:N 关系)links 文章与产品组。每篇文章可以同时出现在多个产品组中,但每个组只能出现一次:
+-----------+----------------+
| ArticleID | ProductGroupID |
+-----------+----------------+
| 1 | 4 |
| 1 | 5 |
| 2 | 5 |
| 2 | 6 |
| 3 | 4 |
| 3 | 6 |
+-----------+----------------+
我现在的问题是我需要一个查询来找出 ID 为 4 的产品组中缺少的文章。 通常我会写一个 PHP 脚本来循环整个 table 并检查值并记住是否找不到 product-group-id 4。
但这似乎非常复杂和烦人,因为我经常遇到这种情况。
我不能使用 WHERE ProductGroupID NOT IN(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);
用简单的英语阅读,上面的查询告诉 return 我们在与 ProductGroupID = 4
关联的 link table 中找不到条目的文章名称.