24

同じ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に異なるアドレスを持つものとしてID3だけを返したいと思います。

4

4 に答える 4

31

テーブルをそれ自体で結合し、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

これは、請求先住所(例として住所コード= 1)が配送先住所(住所コード= 2)と異なる顧客を見つけるのに役立つと思います。

于 2012-12-04T17:15:52.010 に答える
4

これはPL/SQLで機能します。

select count(*), id,address from table group by id,address having count(*)<2
于 2012-12-04T17:18:37.157 に答える
3

これは、次のグループを使用して実行できます。

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
于 2012-12-04T17:17:32.133 に答える
0

個人的には、PerlまたはPythonを使用してファイルにそれらを印刷します。

<COL_NAME>:  <COL_VAL>

各行に対して、ファイルに列と同じ数の行が含まれるようにします。次にdiff、Unixを使用していると仮定して、2つのファイル間を実行するか、別のOSで同等のユーティリティを使用してそれらを比較します。複数のレコードセット(つまり、複数の行)がある場合は、各ファイル行の前に追加すると、ファイルにはNUM_DB_ROWS*NUM_COLS行が含まれます。

于 2012-12-04T17:14:38.793 に答える