我有两个语句要合并到一个输出中。
声明一:
select name from auxiliary_variable_inquiry
where inquiry_idbr_code = '063'
返回以下名称列表:
Name
------------
Affiliates
NetBookValue
Parents
Worldbase
声明二:
select name, value from auxiliary_variable_value
where inquiry_idbr_code = '063'
and ru_ref = 20120000008
and period = 200912
返回以下内容:
Name Value
-------------------
Affiliates 112
NetBookValue 225.700
我想有这样的输出:
Name Value
-------------------
Affiliates 112
NetBookValue 225.700
Parents 0
Worldbase 0
所以基本上,如果第二个查询只返回2个名称和值,我仍然希望显示第一个查询中的完整名称集,没有值。如果两个查询都返回了所有四个值,则将显示所有四个值。
很抱歉我必须添加,我使用Ingres SQL,所以我无法使用ISNULL功能。
答案 0 :(得分:2)
您可以进行左连接。这可确保第一个表中的所有记录都保持包含在内。其中value为null,未找到子记录,在这些情况下我们使用coalesce显示0。
select i.name, COALESCE(v.Value,0) from auxiliary_variable_inquiry i
left join auxiliary_variable_value v
on v.inquiry_idbr_code = i.inquiry_idbr_code
and v.ru_ref = 20120000008
and v.period = 200912
where i.inquiry_idbr_code = '063'
答案 1 :(得分:1)
我建议使用LEFT OUTER JOIN语法进行自我JOIN。包括您的额外'来自JOIN条件中第二个查询的条件,而第一个条件保留在WHERE中,如下所示:
select a.name, CASE WHEN b.Value IS NULL THEN 0 ELSE b.Value END AS Value
from
auxiliary_variable_inquiry a
LEFT JOIN
auxiliary_variable_inquiry b ON
a.name = b.name and -- replace this with your real ID-based JOIN
a.inquiry_idbr_code = b.inquiry_idbr_code AND
b.ru_ref = 20120000008 AND
b.period = 200912
where a.inquiry_idbr_code = '063'
答案 2 :(得分:0)
如果我做对了,你应该使用类似的东西:
SELECT i.NAME,
v.NAME,
v.value
FROM auxiliary_variable_inquiry i
LEFT JOIN auxiliary_variable_value v
ON i.inquiry_idbr_code = v.inquiry_idbr_code
WHERE v.ru_ref = 20120000008
AND v.period = 200912