【发布时间】:2013-09-26 18:57:48
【问题描述】:
表名: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 行
- 对那些非来自这些州或城市的注册号码置空
- 如果两者都匹配,则使用州的注册号码(即坦帕使用 666222666,即使我们可以找到 TAMPA 的条目)
如果这没有意义,我很抱歉,但我已尽力解释。我还尝试了左外连接和右外连接的不同组合,但不知道如何为 WHERE 组合施加层次结构。我想到了 UNIONS,但我认为即使是工会也会为坦帕的一位客户列出 2 行,其中包含两个 REG_NBR。 有什么建议吗?
为混乱的代码道歉,因为我正在使用(不是这样)智能手机发布这个问题。
【问题讨论】: