【问题标题】:Set difference in MySQL without primary key在没有主键的情况下在 MySQL 中设置差异
【发布时间】:2017-05-31 09:25:38
【问题描述】:

我想在 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 …

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

【问题讨论】:

  • 添加一些示例表数据和预期结果 - 以及格式化文本。

标签: mysql sql set-difference


【解决方案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 . . .
                 );

如果任何列有nullNot exists 通常会更直观地工作。另外,您可以使用<=>NULL-安全相等运算符。

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2011-11-03
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2011-09-13
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多