检查所有表行是否相等

Gre*_*reg 11 sql sql-server

有两个表具有相同的结构.
我们假设两者中的行数相等.
你如何检查所有行是否相等?有没有比比较两个表中具有相同id的给定行的每个列值更快的方法?

Abe*_*ler 21

试试这个:

SELECT * FROM table1
EXCEPT
SELECT * FROM table2
Run Code Online (Sandbox Code Playgroud)

如果有任何回报,那么他们就不平等了.

  • 正如埃里克正确指出的那样,如果 table1 是 table2 的子集,这将不起作用 (2认同)
  • 并且在双行(例如具有相同值的两行)的情况下不起作用。 (2认同)

Eri*_*own 8

安倍的答案是正确的,但前提是它们的行数相同.(当我写下我的原始回答"谴责"他的答案时,我误解了这个问题.)如果table1可能是(更大的)table2的子集,反之亦然,我会尝试:

if 
(
not exists ( select * from table1
             except
             select * from table2
           )
and
not exists ( select * from table2
             except
             select * from table1
           )
)
Run Code Online (Sandbox Code Playgroud)

如果它们是相同的,则为true,如果它们不同则为false.