这是解释, 主表: -
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
答案 0 :(得分:2)
我认为您需要使用LEFT JOIN
或RIGHT JOIN
和NVL
函数来替换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
。如果列为空,它将返回您在参数中给出的值。
答案 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
链接到演示:
答案 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
完整的外连接允许您从两个表中获取数据,即使第一个表中没有数据也是如此。