我正在尝试执行此查询:
SELECT mac, creation_date
FROM logs
WHERE logs_type_id=11
AND mac NOT IN (select consols.mac from consols)
但我没有结果。我测试了它,我知道语法有问题。在MySQL中,这样的查询非常有效。我添加了一行以确保mac
表中不存在一个consols
,但它仍然没有给出任何结果。
答案 0 :(得分:126)
使用NOT IN时,应确保没有值为NULL:
SELECT mac, creation_date
FROM logs
WHERE logs_type_id=11
AND mac NOT IN (
SELECT mac
FROM consols
WHERE mac IS NOT NULL -- add this
)
答案 1 :(得分:27)
使用NOT IN时,您还应该考虑NOT EXISTS,它会静默处理空案例。另请参阅PostgreSQL Wiki
SELECT mac, creation_date
FROM logs lo
WHERE logs_type_id=11
AND NOT EXISTS (
SELECT *
FROM consols nx
WHERE nx.mac = lo.mac
);
答案 2 :(得分:6)
您还可以使用LEFT JOIN和IS NULL条件:
SELECT
mac,
creation_date
FROM
logs
LEFT JOIN consols ON logs.mac = consols.mac
WHERE
logs_type_id=11
AND
consols.mac IS NULL;
“mac”列上的索引可能会提高性能。