2

次の現実的なシナリオを検討してください。

町のテーブルがありますが、それらの町のそれぞれの郵便番号を検索したいと考えています。ほとんどの場合、町ごとに 1 つの郵便番号しかないため、これは簡単に実行できますが、都市を扱う場合は例外が適用されます。

次の 2 つのテーブルがあります。

CONTACT
Town          | Zip
--------------+----
Ft Washington | NULL
Ambler        | NULL
Media         | NULL
Ambler        | NULL
New York      | NULL

CITIES_EXTENDED
Town          | Zip
--------------+----
Ft Washington | 19034
Ambler        | 19002
Media         | 19063
New York      | 10101
New York      | 10102
New York      | 10103
New York      | 10104

に対してINNER JOIN4 行が返されますNew York。そのデータは本質的に不正確であるため、これは明らかに望ましくありません。

望ましい結果は次のとおりです。

Town          | Zip
--------------+----
Ft Washington | 19034
Ambler        | 19002
Media         | 19063
Ambler        | 19002
New York      | NULL

この目標を達成する最善の方法は何ですか?

4

2 に答える 2

3

これで問題は解決しますか?

select ce.Town, 
case when count(*) > 1 then null else Max(c.Zip) end as Zip
from CITIES_EXTENDED ce
    inner join CONTACT c
        on ce.Town = c.Town
    group by ce.Town

c.Zip の値は 1 つしかないため、Max() 関数は問題なく機能します。

于 2013-06-13T15:10:28.213 に答える