テーブル名: REG_NBRS
STATE CITY COUNTRY REG_NBR
------------------------------------------
ILLINOIS USA 444333222
NEBRASKA USA 111222333
NEW YORK USA 333444555
FLORIDA USA 666222666
TAMPA USA 888333888
このようなデータがあり、その州または都市の REG_NBR を取得する必要があります。行が州と市の両方に一致する場合、市が優先されます。州または市のいずれにも一致しない場合は、reg_nbr が null の行をリストする必要があります。クエリを考え出そうとしましたが、外部結合を行うときに優先度を課す方法がわからないため、あまり成功しませんでした。
SELECT C.NAME, C.AGE, RN.REG_NBR
FROM CUSTOMER C, REG_NBRS RN
WHERE C.COUNTRY = RN.COUNTRY
AND (C.STATE = RN.STATE OR C.CITY = RN.CITY)
AND C.ID BETWEEN 1000 AND 2000
初心者なので、これら 2 つのテーブルを結合する方法がわかりません。
- STATE と City で最初に結合します
- それでも1000行すべてをリストします
- これらの州または都市からのものではない登録番号に null を入力します
- 両方が一致する場合は、州の登録番号を使用します (つまり、TAMPA のエントリが見つかったとしても、Tampa には 666222666 を使用します)。
これが意味をなさない場合は申し訳ありませんが、可能な限り説明しようとしました。左外部結合と右外部結合のさまざまな組み合わせも試しましたが、WHERE条件に階層を課す方法がわかりませんでした。私は UNIONS を考えましたが、ユニオンでも REG_NBR の両方を持つタンパの顧客に対して 2 つの行をリストすると思います。助言がありますか?
この質問を投稿するために(そうではない)スマートフォンを使用しているため、ごちゃごちゃしたコードについてお詫び申し上げます。