在postgres中设置差异

时间:2019-01-18 13:30:04

标签: sql postgresql

我有一个表temp(a int),它存储(1),(2)和(3)。我还有另一个表temp2(int),它仅存储(1)。我想要的只是临时的值。我的尝试:-

  SELECT a FROM temp WHERE a NOT IN temp2;

我收到错误

  

错误:“ temp2”处或附近的语法错误第1行:从不在temp2中的temp中选择一个;”。

为什么会这样?正确的方法是什么?谢谢!

4 个答案:

答案 0 :(得分:1)

另一种选择是使用EXCEPT

select a 
from temp
except
select a
from temp2;

答案 1 :(得分:1)

您已经有了很好的答案,我只想添加一个。 您也可以使用LEFT JOIN

SELECT temp.a
FROM temp 
LEFT JOIN temp2 
ON temp.a = temp2.a
WHERE temp2.a IS NULL;

答案 2 :(得分:1)

您也可以使用NOT EXISTS

SELECT t.*
FROM temp t
WHERE NOT EXISTS (SELECT 1 FROM temp2 t2 WHERE t2.a = t.a);

答案 3 :(得分:0)

不要像下面那样使用

SELECT a FROM temp WHERE a NOT IN ( select a from temp2 where a is not null)