0

2 つの異なるデータベースに 2 つのテーブルがあります。列の名前とすべてが一致します。クエリを実行して、両方のテーブルのデータが同一で​​あることを確認するにはどうすればよいですか。各行を確認する必要があります。

4

1 に答える 1

1

データ セット全体に対して yes/no の回答が必要で、テーブルに少なくとも 1 つのキーがある場合は、すべての列を使用して内部結合を実行し、返される行数が各テーブルの行数と等しいことを確認します。 .

select
    count(*)
from
    a
    inner join b
on
    a.c1 = b.c1 and
    a.c2 = b.c2 and
    a.c3 = b.c3

正規化された結果として各テーブルとは異なる特定の行が必要な場合は、各テーブルから一意の (交差しない) 行を取得するために、複数 (少なくとも 2 つ) の選択が必要になります。もちろん、テーブルは同一のスキーマであるため、これらを適切に結合し、ソース テーブルの列を結果に射影して、各行がどのテーブルから発生したかを示すことができます。

結果の違いをキーで関連付ける必要があり (行の内容の変更、行の追加、行の削除など、編集前後の検索など)、DBMS が完全外部結合をサポートしている場合は、すべての列が等しいわけではない結果のみを返します。これは、削除時にキーが再利用されないことを前提としていることに注意してください。

SELECT *
FROM a
FULL OUTER JOIN b
ON a.PK = b.PK
WHERE
    a.c1 <> b.c1 OR
    a.c2 <> b.c2 OR
    a.c3 <> b.c3

上記の例では、'SET ANSI NULLS OFF' を介して MS SQL で実行できるように、2 つの null 値が等しいと仮定していることにも注意してください。このように表現する方が速かっただけです。

于 2013-05-08T10:35:05.317 に答える