2012-03-19 19 views
1

このシナリオではSQLの作成に少し問題があります。テーブルの2つの列が同期されていることを確認するSQLコード

たとえば、テーブルを指定すると(実際のデータを単純化してマスクするだけです)、ContactInfoにはAddressとPhoneという2つの列があります。そうでない場合、私は旗、それを、携帯電話は常にそのアドレス(したがって、「同期」)のために同じであることを指定されたアドレスを確認するSQLを記述したいと考え:だから

enter image description here

この例では、AbcとDefの人が同じ住所を持っている場合、電話機は同じでなければなりません(つまり居住者の固定電話番号は1つだけです)。

***テーブルが非正規化が、どのようにそれです、正規化はオプションではありません...

これは、Sybase ASE 12.5用です。あなたが試みることができる

+0

そのことについて申し訳ありませんが、私は今、データベース製品と使用されているバージョンを追加しました。 –

答えて

2

さて、この

SELECT a.*, b.* 
FROM ContactInfo a 
    INNER JOIN ContactInfo b on a.address = b.address 
WHERE a.phone != b.phone 

いくつかのSQLの好むこれはあなたのアドレスと一致しますが、電話番号と一致しないすべてのレコードを取得します<>

!=に。それで、Abc & KLMとDEFとKlmが表示されます(Abc & Defではありません)。

ここでが正しいと判断することはできません。おそらくKlmが正しい電話番号で、abcとdefの両方が移動している可能性があります。またはKlmに携帯電話があります。

+2

+1は、どちらの電話番号が正しいかを示すものではないことを指摘しています。 OP以外にも、このクエリで{distinct}キーワードを使用して、結果が重複しないようにすることができます(例:abc&klm、def&klm、klm&abc、klm&def)。 – user937146

+1

別のこととして、Sybase ASEでは大文字と小文字が区別されます。質問に含まれる表の列が、回答に入力した列と一致しません(例:address!= Address) –

0

私はこのように、唯一の誤ったアドレスを与えることを好むだろう:

SELECT distinct a.Address 
FROM ContactInfo a 
    INNER JOIN ContactInfo b on a.Address = b.Address 
WHERE a.Phone != b.Phone 
関連する問題