有三个表格:
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
答案 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)