如何通过 SQL 中的另一个 table 找到一个 table 中不存在的值
How to find a value that doesn't exist in one table through another table in SQL
出版商Table
图书Table
这些是我的 SQL 查询中的 2 个表,我想找出尚未出版任何书籍的出版商
我使用 SQL 服务器并且我使用了:
SELECT PublisherID
FROM Publisher
WHERE PublisherID NOT IN (SELECT PublisherID FROM Book);
但它不起作用。我做错了什么吗?
这是该查询的结果
结果Table
您必须在子查询中使用条件 PublisherID IS NOT NULL
。您的 NULL
记录返回所有行的 false
。
SELECT PublisherID
FROM Publisher
WHERE PublisherID NOT IN (SELECT PublisherID FROM Book WHERE PublisherID IS NOT NULL);
或者您可以使用 LEFT JOIN
并使用 WHERE b.PublisherID IS NULL
添加条件。
SELECT *
FROM Publisher p
LEFT JOIN Book b
ON b.PublisherID = p.PublisherID
WHERE b.PublisherID IS NULL
要找出出版了超过 1 本书的出版商,您可以使用 GROUP BY
& HAVING
和 IN
,如下所示。
SELECT PublisherID
FROM @Publisher
WHERE PublisherID IN (
SELECT PublisherID
FROM @Book
WHERE PublisherID IS NOT NULL
GROUP BY PublisherID
HAVING COUNT(PublisherID) > 1
);
NOT IN
can return incorrect results 当涉及 NULL
值时。而是使用 NOT EXISTS
SELECT p.PublisherID
FROM Publisher p
WHERE NOT EXISTS (SELECT 1
FROM Book b
WHERE b.PublisherID = p.PublisherID
);
出版商Table
图书Table
这些是我的 SQL 查询中的 2 个表,我想找出尚未出版任何书籍的出版商
我使用 SQL 服务器并且我使用了:
SELECT PublisherID
FROM Publisher
WHERE PublisherID NOT IN (SELECT PublisherID FROM Book);
但它不起作用。我做错了什么吗?
这是该查询的结果 结果Table
您必须在子查询中使用条件 PublisherID IS NOT NULL
。您的 NULL
记录返回所有行的 false
。
SELECT PublisherID
FROM Publisher
WHERE PublisherID NOT IN (SELECT PublisherID FROM Book WHERE PublisherID IS NOT NULL);
或者您可以使用 LEFT JOIN
并使用 WHERE b.PublisherID IS NULL
添加条件。
SELECT *
FROM Publisher p
LEFT JOIN Book b
ON b.PublisherID = p.PublisherID
WHERE b.PublisherID IS NULL
要找出出版了超过 1 本书的出版商,您可以使用 GROUP BY
& HAVING
和 IN
,如下所示。
SELECT PublisherID
FROM @Publisher
WHERE PublisherID IN (
SELECT PublisherID
FROM @Book
WHERE PublisherID IS NOT NULL
GROUP BY PublisherID
HAVING COUNT(PublisherID) > 1
);
NOT IN
can return incorrect results 当涉及 NULL
值时。而是使用 NOT EXISTS
SELECT p.PublisherID
FROM Publisher p
WHERE NOT EXISTS (SELECT 1
FROM Book b
WHERE b.PublisherID = p.PublisherID
);