两个SQL表中的不同值

时间:2016-03-08 11:55:45

标签: sql postgresql

我正在尝试从SQL中的两个表中选择不同的值,但我的代码不起作用。它的第一部分有效:

SELECT distinct a.c1, b."Commodity.Code"::numeric FROM coletados a, commod b 
    WHERE a.c1 = b."Commodity.Code"::numeric

但是当我尝试选择不同的值时,它不起作用。我的整个SQL语句是:

SELECT * FROM commod b
    WHERE b."Commodity.Code"::numeric =! 
        (SELECT DISTINCT a.c1, b."Commodity.Code"::numeric 
            FROM coletados a, commod b
                WHERE a.c1 = b."Commodity.Code"::numeric)

实际上,我只想要两个表中不同数字的列,所以我不需要'*',但我不知道我是否可以选择相同的变量(a.c1或b。“Commodity.Code”)两次。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在将一个值与两个值进行比较。在Postgres中,一种方法是:

select *
from commod b
where (b.c1, "Commodity.Code"::numeric) not in (select a.c1, a."Commodity.Code"::numeric
                                                from coletados a
                                               );

或者,使用您的方法:

select *
from commod b
where "Commodity.Code"::numeric not in (select a."Commodity.Code"::numeric
                                        from coletadoa a
                                        where a.c1 = b.c1
                                       );

也就是说,子查询不需要join,只需要一个关联子句。