0

我想在 MySQL 中做一个 EXCEPT/MINUS。如果主键可用,显而易见的解决方案是:

SELECT
    *
FROM
    table_a AS a
WHERE
    a.ID not in(
        SELECT
            b.ID
        FROM
            table_b AS b
    )

但是,如果我没有键列并且我想要一个实际的设置差异,即考虑所有(可能很多)列怎么办?

我想要类似的东西

SELECT * FROM table_a WHERE * NOT IN …

这当然是不可能的。我不能将整行分配给变量,可以吗?有任何想法吗?

4

1 回答 1

1

您仍然可以使用not in

select a.*
from table_a a
where (a.col1, a.col2, . . . ) not in (select b.col1, b.col2, . . . from table_b b);

但是,我倾向于使用exists

select a.*
from table_a a
where not exists (select 1
                  from table_b b
                  where a.col1 = b.col1 and a.col2 = b.col2 and . . .
                 );

Not exists如果任何列有null. <=>另外,您可以使用NULL-safe 相等运算符。

于 2017-01-16T14:06:28.460 回答