将表中的两行合并到一起使用SQL

时间:2017-11-09 08:29:40

标签: sql oracle

我正在尝试编写一个执行以下操作的SQL查询(在Oracle DB中):

表:

Id | Name  | Father_id

1  | John  | 2
2  | Peter |
3  | Ann   | 2

预期结果:

Name  | Father_Name

John    Peter
Ann     Peter

我想列出父亲一行中有父亲的所有人。用户可以(当然)最大。一个父亲,但没有必要。

这是编写此类查询的最佳方式吗?

3 个答案:

答案 0 :(得分:2)

自我加入,如果你想要没有父亲的孩子,可以做左外连接

select *
from table t_child join 
     table t_father on t_child.father_id = t_father.id

答案 1 :(得分:0)

尝试这个sql它将确定无误地工作

select child.MenuName as ChildName,parent.MenuName as ParentName from table_name as child
left join table_name as parent on child.parentId = parent.MenuId

你需要使用左,因为你提到的不一定是

答案 2 :(得分:0)

您不需要使用自联接(以及两个表/索引扫描),而是可以使用分层查询来执行此操作:

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE people ( Id, Name, Father_id ) AS
SELECT 1, 'John',  2    FROM DUAL UNION ALL
SELECT 2, 'Peter', NULL FROM DUAL UNION ALL
SELECT 3, 'Ann',   2    FROM DUAL

查询1

SELECT name,
       PRIOR name AS father_name
FROM   people
WHERE  LEVEL > 1
OR     CONNECT_BY_ISLEAF = 0     -- Comment out if you do not want Peter,NULL
CONNECT BY PRIOR id = father_id

<强> Results

|  NAME | FATHER_NAME |
|-------|-------------|
| Peter |      (null) |
|  John |       Peter |
|   Ann |       Peter |