0

我有两个要合并到一个输出中的语句。

声明一:

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 函数。

4

3 回答 3

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' 
于 2014-11-04T12:44:33.897 回答
1

我建议使用 LEFT OUTER 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' 
于 2014-11-04T12:47:09.590 回答
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 
于 2014-11-04T12:47:38.680 回答