联接到SQL Server中的不同列

时间:2019-04-09 14:58:20

标签: sql sql-server left-join

我在表1下有一个主表:

Name                ID      Entry_Dt
PEREZ               2000        8/14/2014 
PEREZ               2000        8/29/2017 
Domingo             2098        8/29/2017 

我在下面还有另一个table2:

kid_id  Parent_id   
2098    2000        

我想要这样的结果:

Name     Kid_id     Parent_id   Entry_dt
PEREZ               2000        8/14/2014
PEREZ               2000        8/29/2017
Domingo   2098                  8/29/2017

我使用了两种不同的方法,例如下面的示例,但是结果并不理想。

1:联合方法

select *
FROM Table1 A INNER JOIN Table2 b
ON A.ID= B.Kid_id
union
select *
FROM Table1 A INNER JOIN Table2 b
ON A.ID= B.Parent_id

2:左联接方法:

select *
FROM Table1 A LEFT JOIN Table2 b
ON (A.ID= B.Kid_id or A.ID = B.Parent_id)

为什么我的方法不起作用?有任何改进的想法吗?

4 个答案:

答案 0 :(得分:1)

您必须链接两个不同的JOINs,第一个是父母的LEFT JOIN(如果存在),第二个也是孩子的LEFT JOIN(如果存在)。 / p>

因此,您在字段列表中将kind_id / parent_id公开为两个不同的列

尝试一下:

SELECT main.name, main.id, kid.Kid_id, parent.parent_id, main.Entry_dt
FROM Table1 main
LEFT JOIN Table2 kid
ON main.id = kid.Kid_id
LEFT JOIN Table2 parent
ON main.id = parent.Parent_id

请参见SQL Fiddle

答案 1 :(得分:0)

您应该使用左联接

OOOO

答案 2 :(得分:0)

您这里不需要左联接-您也可以进行内联接。 LEFT JOIN的要点是,当您需要一个表中的某行不存在于另一表中的行时,但是在这里,表1中的每一行在表2中都有一个匹配项。您需要在连接条件中使用OR。

要获得所需的输出,您需要做一些选择。查看示例:

SELECT A.Name,
       CASE
           WHEN A.ID = B.Parent_Id THEN
               A.ID
           ELSE
               ''
       END AS ID,
       CASE
           WHEN A.ID = b.Kid_Id THEN
               b.Kid_Id
           ELSE
               ''
       END AS Kid_Id,
       CASE
           WHEN A.ID = b.Parent_Id THEN
               b.Parent_ID
           ELSE
               ''
       END AS Parent_Id,
       A.Entry_Dt
FROM Table1 A
    INNER JOIN Table2 b
        ON (
               A.ID = b.Kid_id
               OR A.ID = b.Parent_id
           );

SQL Fiddle Sample

答案 3 :(得分:0)

您可以通过将table2与table1两次连接来实现此目的。一个作为父母,另一个作为孩子。

查询

select table1.name, table1.ID, parent.parent_Id, kid.kid_id,table1.Entry_dt
from table1
left join table2 parent on parent.parent_Id = table1.id
left join table2 kid on kid.kid_id = table1.id

输出

enter image description here