除了它在其他2个表中退出

时间:2015-09-07 16:21:00

标签: sql postgresql except sql-except

我需要从表产品中获取所有值,除了它们在其他2个表产品中退出。这个查询是否可以使用2个EXCEPTS?应该采用不同的方式。

CREATE table missing_values
AS
select post
from product
EXCEPT
select post
from product_table_a
EXCEPT
select post
from product_table_b
;

2 个答案:

答案 0 :(得分:2)

正如MatBailie所说,你应该尝试你的查询,看看是否能给你你想要的结果。

但是如果不起作用,您可以使用双not exists

来解决它

p1p2无法找到p3

SELECT post
FROM product p1
WHERE not exists (SELECT p2.post                       
                  FROM product_table_a p2
                  WHERE p1.post = p2.post)
AND   not exists (SELECT p3.post                       
                  FROM product_table_b p3
                  WHERE p1.post = p3.post)

这也许是一种更有效的方式

SELECT post
FROM product p1
left join product_table_a p2
   on p1.post = p2.post
left join product_table_b p3
   on p1.post = p3.post
WHERE p2.post is null
and   p3.post is null

答案 1 :(得分:1)

A - B - CA - (B + c)相同:

SELECT post
FROM product
EXCEPT
(
  SELECT post
  FROM product_table_a
  UNION ALL
  SELECT post
  FROM product_table_b
) AS sum;