[英]SQL (oracle) imposing hierarchy on where clause
表名稱: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
作為一個初學者,我不知道如何以這種方式連接這兩個表
很抱歉,如果這沒有道理,但我已盡力解釋。 我還嘗試了左外部聯接和右外部聯接的不同組合,但無法獲得如何為WHERE前提強加層次結構的方法。 我想到了UNIONS,但我認為即使是工會也會為坦帕的兩個REG_NBR客戶列出兩行。 有什么建議么?
我正在使用一個(不是這樣的)智能手機來張貼這個問題,請為混亂的代碼表示歉意。
假設您在(國家/地區,州/省)和(國家/地區,城市)具有唯一的鍵,則可以通過兩次以下簡單的方式來實現:
SELECT
C.NAME, C.AGE,
COALESCE(RN1.REG_NBR, RN2.REG_NBR) AS REG_NBR
FROM CUSTOMER C
LEFT OUTER JOIN REG_NBRS RN1
ON RN1.COUNTRY = RN1.COUNTRY
AND RN1.STATE = C.STATE
LEFT OUTER JOIN REG_NBRS RN2
ON RN2.COUNTRY = C.COUNTRY
AND RN2.CITY = C.CITY
WHERE C.ID BETWEEN 1000 AND 2000
而且,這應該比數據庫不怎么喜歡的OR更快(至少在適當的索引位置)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.