同じIDの2つのアドレスを比較して、一致するかどうかを確認しようとしています。例えば:
Id Adress Code Address
1 1 123 Main
1 2 123 Main
2 1 456 Wall
2 2 456 Wall
3 1 789 Right
3 2 100 Left
各IDのアドレスが一致するかどうかを把握しようとしています。したがって、この場合、アドレスコード1と2に異なるアドレスを持っているため、ID 3のみを返します。
テーブルをそれ自体と結合し、2つの異なるエイリアス(次の例のA
とB
)を指定します。これにより、同じテーブルの異なる行を比較できます。
SELECT DISTINCT A.Id
FROM
Address A
INNER JOIN Address B
ON A.Id = B.Id AND A.[Adress Code] < B.[Adress Code]
WHERE
A.Address <> B.Address
「より小さい」比較<
は、2つの異なるアドレスを取得し、同じ2つのアドレスコードを2回取得しないようにします。 「等しくない」を使用する<>
代わりに、コードを(1、2)および(2、1)として生成します。それぞれがA
エイリアスとB
エイリアスを順番に使用します。
Join句は、where句が追加条件をテストする行のペアリングを担当します。
上記のクエリは、どの住所コードでも機能します。アドレスを特定のアドレスコードと比較する場合は、クエリを次のように変更できます。
SELECT A.Id
FROM
Address A
INNER JOIN Address B
ON A.Id = B.Id
WHERE
A.[Adress Code] = 1 AND
B.[Adress Code] = 2 AND
A.Address <> B.Address
これは、配送先住所(住所コード= 2)とは異なる請求先住所(例として住所コード= 1)を持つ顧客を見つけるのに役立つと思います。
これはPL/SQLで機能します。
select count(*), id,address from table group by id,address having count(*)<2
次の方法でグループを使用してこれを行うことができます。
select id, addressCode
from t
group by id, addressCode
having min(address) <> max(address)
これを記述する別の方法はより明確に見えるかもしれませんが、同様に機能しません:
select id, addressCode
from t
group by id, addressCode
having count(distinct address) > 1
個人的には、PerlまたはPythonの形式でファイルに出力します
<COL_NAME>: <COL_VAL>
ファイルが列と同じ数の行を持つように、各行に対して。次に、2つのファイル間でdiff
を実行します。Unixを使用している場合、または別のOSで同等のユーティリティを使用してそれらを比較します。複数のレコードセット(つまり、複数の行)がある場合、各ファイル行の先頭に追加し、ファイルにはNUM_DB_ROWS * NUM_COLS行が含まれます