列上的SQL条件连接

时间:2015-06-08 08:35:57

标签: sql oracle conditional

有三个表格:

Clearance:  CLEARANCE_ID, ZONE, LOC
Zone:       ZONE, ZONE_DESC
Location:   LOC, LOC_DESC

我有以下查询。

Select * from RC.CLEARANCE_ID, RC.TYPE, RC.ZONE, R.ZONE_DESC, RC.LOC, L.LOC_DESC
FROM CLEARANCE RC, ZONE R, LOC L

RC.TYPE的值对于区域为0,对于位置为1。

如果RC.TYPE = 0和,我希望ZONE_DESC(来自区域表)出现 如果RC.TYPE = 1

,LOC_DESC将从LOC表中显示

如果我将CLEARANCE表连接到其他表,如果没有记录,则其中一个字段(ZONE或LOC)在每种情况下都为空。

如何进行此查询?

例如:

CLEARANCE ID  TYPE  ZONE  ZONE_DESC  LOC   LOC_DESC
   3           0     10    ZONE1     null     null
   4           1    null   null       50    Location1 

1 个答案:

答案 0 :(得分:1)

这应该这样做:

SELECT c.clearance_id
    , c.type
    , DECODE(c.type, 0, z.zone, 1, l.loc) zone_loc
    , DECODE(c.type, 0, z.zone_desc, 1, l.loc_desc) zone_loc_desc
FROM clearance c
LEFT JOIN zone z ON (c.type = 0 AND c.zone = z.zone)
LEFT JOIN location l ON (c.type = 1 AND c.loc = l.loc)