我正在尝试执行以下查询:
SELECT mac, creation_date
FROM logs
WHERE logs_type_id=11
AND mac NOT IN (select consols.mac from consols)
但是我没有得到任何结果。我测试了它,我知道它的语法有问题。在MySQL中,这样的查询可以完美地工作。我添加了一行,以确保consols
表中不存在一个mac
,但它仍然没有给出任何结果。
发布于 2011-12-11 17:39:08
使用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
)
发布于 2011-12-11 19:32:50
当使用NOT IN时,您还应该考虑NOT EXISTS,它会静默地处理null情况。另请参阅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
);
发布于 2011-12-11 20:27:03
您还可以使用左联接和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“列上建立索引可能会提高性能。
https://stackoverflow.com/questions/8463043
复制相似问题