SQLだけでテーブル内容の一致判定をする

同じ定義のテーブルが2つあり、 その全行が同じかどうか(違う行がないか)を確かめたいときの方法。

select count(*) from (
  (select * from x except select * from y)
  union all
  (select * from x except select * from y)
)

結果が 0 なら内容は同じです。1 以上なら何かしら異なる。

ちなみに遅いです。あくまでも行数が少ないとき向け(100万行くらいまでか)。 高速にしたいならテーブルごとにユニークキーを考えてSQL書くしかないですね。