表名: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
作为初学者,我不知道如何以这样的方式连接这两个表
- 它首先加入了 STATE 和 City
- 但仍然列出所有 1000 行
- 将 null 到那些不是来自那些州或城市的注册号码
- 如果两者都匹配,则使用州的注册号码(即坦帕使用 666222666,即使我们可以找到坦帕的条目)
如果这没有意义,我很抱歉,但我已尝试尽可能多地解释。我还尝试了左外连接和右外连接的不同组合,但不知道如何为 WHERE 组合施加层次结构。我想到了 UNIONS,但我认为即使是工会也会为坦帕的一位客户列出 2 行,其中包含两个 REG_NBR。有什么建议么?
为混乱的代码道歉,因为我正在使用(不是这样)智能手机发布这个问题。