SQL:每个联接的新结果行

时间:2019-06-29 13:44:57

标签: sql join select

下表如下:

|child   | parent|

|John    |       |
|Ivan    | Ralph |
|Kat     | Ivan  |

我需要通过一个孩子的名字来检索一个孩子-父母条目和一个父母-祖父母条目。

例如Kat的结果应该是:

|Ivan    | Ralph |
|Kat     | Ivan  |

尝试使用此查询:

SELECT * FROM people AS c1
           LEFT JOIN people AS c2 ON c2.child = c1.parent WHERE c1.child = 'Kat'

但是它将结果作为一行返回。

|child   | parent| child   | parent|
|Kat     | Ivan  | Ivan    | Ralph |

我应该如何构成查询,以便它在新行中返回完整内容?

1 个答案:

答案 0 :(得分:0)

您不需要联接,相关的子查询即可:

SELECT * FROM people 
WHERE child = 'Kat' OR
child = (SELECT parent FROM people WHERE child = 'Kat')

假设每个孩子只有一个父母。
如果可以有更多的父母,则将=更改为IN

SELECT * FROM people 
WHERE child = 'Kat' OR
child IN (SELECT parent FROM people WHERE child = 'Kat')