SQL连接/联合

SQL连接/联合,sql,join,ingres,Sql,Join,Ingres,我有两条语句要合并到一个输出中 声明一: 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 =

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

声明一:

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个名称和值,我仍然希望显示第一个查询中的完整名称集,不带任何值。如果两个查询都返回了所有四个值,那么将显示所有四个值


抱歉,我必须添加,我使用的是Ingre SQL,因此我无法使用ISNULL函数。

您可以执行左连接。这确保了第一个表中的所有记录都将保持包含状态。如果值为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' 

你可以做一个左连接。这确保了第一个表中的所有记录都将保持包含状态。如果值为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' 

你可以做一个左连接。这确保了第一个表中的所有记录都将保持包含状态。如果值为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' 

你可以做一个左连接。这确保了第一个表中的所有记录都将保持包含状态。如果值为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' 

我建议使用左外连接语法进行自连接。将第二个查询中的“额外”条件包括在联接条件中,而第一个条件保留在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' 

我建议使用左外连接语法进行自连接。将第二个查询中的“额外”条件包括在联接条件中,而第一个条件保留在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' 

我建议使用左外连接语法进行自连接。将第二个查询中的“额外”条件包括在联接条件中,而第一个条件保留在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' 

我建议使用左外连接语法进行自连接。将第二个查询中的“额外”条件包括在联接条件中,而第一个条件保留在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' 

如果我答对了,您应该使用以下内容:

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 

如果我答对了,您应该使用以下内容:

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 

如果我答对了,您应该使用以下内容:

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 

如果我答对了,您应该使用以下内容:

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 


嗨,我试过这个,因为某些原因,它在col2上加了$1,而且值似乎不正确。而不仅仅是为家长和worldbase填写0,而是从附属公司和NBV复制值,这很奇怪。如果你能在上重现这个问题,我很乐意看一看。@popovitsj,我想这是因为你链接了
查询\u idbr\u code
值,对于示例中的所有四条记录,该值都是
063
。连接需要包含
名称
字段(请参阅下面的答案-也许你能找出$thing),或者每个记录都有一个唯一的ID。嗨,我尝试过这个,出于某种原因,它在col2上添加了一个$,并且值似乎不正确。而不仅仅是为家长和worldbase填写0,而是从附属公司和NBV复制值,这很奇怪。如果你能在上重现这个问题,我很乐意看一看。@popovitsj,我想这是因为你链接了
查询\u idbr\u code
值,对于示例中的所有四条记录,该值都是
063
。连接需要包含
名称
字段(请参阅下面的答案-也许你能找出$thing),或者每个记录都有一个唯一的ID。嗨,我尝试过这个,出于某种原因,它在col2上添加了一个$,并且值似乎不正确。而不仅仅是为家长和worldbase填写0,而是从附属公司和NBV复制值,这很奇怪。如果你能在上重现这个问题,我很乐意看一看。@popovitsj,我想这是因为你链接了
查询\u idbr\u code
值,对于示例中的所有四条记录,该值都是
063
。连接需要包含
名称
字段(请参阅下面的答案-也许你能找出$thing),或者每个记录都有一个唯一的ID。嗨,我尝试过这个,出于某种原因,它在col2上添加了一个$,并且值似乎不正确。而不仅仅是为家长和worldbase填写0,而是从附属公司和NBV复制值,这很奇怪。如果你能在上重现这个问题,我很乐意看一看。@popovitsj,我想这是因为你链接了
查询\u idbr\u code
值,对于示例中的所有四条记录,该值都是
063
。连接需要包括
名称
字段(请参见下面我的答案-也许您可以找出$thing),或者每个记录都有一个唯一的ID。Nico,在
WHERE
子句中使用第二个表中的元素有效地将
左连接
转换为
内部连接
…嗨,这并不完全返回im所需的内容。first name列似乎是重复的,但根本没有0值,只有返回值的副本。Nico使用
WHERE
子句中第二个表中的元素,有效地将
左连接
转换为
内部连接
…嗨,这并没有完全返回im所要返回的内容。first name列似乎是重复的,但根本没有0值,只有返回值的副本。Nico使用
WHERE
子句中第二个表中的元素,有效地将
左连接
转换为
内部连接
…嗨,这并没有完全返回im所要返回的内容。first name列似乎是重复的,但根本没有0值,只有返回值的副本。Nico使用
WHERE
子句中第二个表中的元素,有效地将
左连接
转换为
内部连接
…嗨,这并没有完全返回im所要返回的内容。“名字”列似乎是b