如果Joined表中没有结果行,则返回默认值

时间:2018-04-11 04:16:02

标签: sql oracle

这是解释, 主表: -

ID          |      col1
--------------------------
1                 value1
2                 value2
3                 value3
4                 value4

有一个名为'table1'的辅助表,它将主表ID作为名为Mapping_ID的外键。但是所有主表ID都不能用作table1中的Mapping_ID。

Mapping_ID  |     message
--------------------------
1                 msg1
2                 msg2
4                 msg4

请注意,Mapping_ID的值3不可用。我想通过连接这两个表来创建一个视图,如果table1中没有特定ID的行,我想将一个名为'defaultMsg'的默认值替换为该消息。

输出应如下所示,

ID          |      col1       |    message
---------------------------------------------
1                 value1           msg1
2                 value2           msg2
3                 value3           Defaultmsg
4                 value4           msg4

6 个答案:

答案 0 :(得分:2)

我认为您需要使用LEFT JOINRIGHT JOINNVL函数来替换NULL

-- left join demo
SELECT m.ID,m.col1,NVL(d.message,'Defaultmsg') message
FROM MASTER_TABLE m
LEFT JOIN DETAIL_TABLE d ON d.Mapping_ID=m.ID

-- right join demo
SELECT m.ID,m.col1,NVL(d.message,'Defaultmsg') message
FROM DETAIL_TABLE d
RIGHT JOIN MASTER_TABLE m ON d.Mapping_ID=m.ID

答案 1 :(得分:2)

使用create view view_name as select m.id, m.col1, coalesce(t.message, 'Defaultmsg') message from Master m left join table1 t on t.Mapping_ID = m.id left join默认null(无消息)到' Defaultmsg':

coalesce

答案 2 :(得分:1)

您可以使用函数coalesce。如果列为空,它将返回您在参数中给出的值。

Oracle’s documentation

答案 3 :(得分:1)

您可以通过left joins功能<{1}}来实现这一目标

coalesce()

所以,你可以根据那个

创建一个视图
select m.id, m.col1, coalesce(t.message, 'Defaultmsg') message  
from Master m 
left join table1 t on t.Mapping_ID  = m.id

答案 4 :(得分:1)

试试这个解决方案:

CREATE VIEW V1 (Id,col1,message)
AS SELECT m.Id,m.col1,COALESCE(t.message,'Defaultmsg') AS message
FROM Master m 
LEFT JOIN Table1 t
ON m.Id = t.Mapping_ID
ORDER BY m.ID;

输出:

ID  COL1    MESSAGE
1   value1  msg1
2   value2  msg2
3   value3  Defaultmsg
4   value4  msg4

链接到演示:

  

http://sqlfiddle.com/#!4/ce905a/1

答案 5 :(得分:0)

您可以使用COALESCE进行全外连接:

SELECT COALESCE(TABLE1.ITEMID, TABLE2.ITEMID), COALESCE(VAL1, 0), COALESCE(VAL2, 0), 
    COALESCE(VAL3, 0), COALESCE(VAL4, 0), COALESCE(VAL5, 0)
FROM TABLE1 FULL OUTER JOIN TABLE2 
    ON TABLE1.ITEMID = TABLE2.ITEMID

完整的外连接允许您从两个表中获取数据,即使第一个表中没有数据也是如此。