我在表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
我使用了两种不同的方法,例如下面的示例,但是结果并不理想。
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
select *
FROM Table1 A LEFT JOIN Table2 b
ON (A.ID= B.Kid_id or A.ID = B.Parent_id)
为什么我的方法不起作用?有任何改进的想法吗?
答案 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
);
答案 3 :(得分:0)