MySQL查询表,其中不同的值与多行相关

时间:2015-02-04 23:42:35

标签: mysql nested-queries

我有一张桌子。一个人可能有多个孩子或家属,也是人。因此,人员表之间存在一对多的关系。

我希望所有有一个或多个孩子的人。但是,查询仅返回每个父项的第一个匹配子项,而不是所有父项。如何更改查询以返回所有查询?

SELECT parent, child FROM people 
WHERE parent in (select distinct parent from people)

我期待的更像是表格

[parent] => Array
{
    [child] => 'Sam'
    [child] => 'Mark'
    ....
}

人员表没有什么比这更复杂的,就像下面的那样:

Entry   Parent  Child
1       Josh    Sam
2       Josh    Mark
3       Sue     Tim
4       Sue     Cat
5       Sue     Max
6       Dave    Tia

1 个答案:

答案 0 :(得分:0)

假设您的people表格结构为:

id     name     surname    parent_id
------------------------------------
1      John     Smith      NULL
2      Ann      Kowalsky   NULL
3      Matt     Smith      1
4      Jane     Smith      1
5      Rob      Kowalsky   2  

(其中NULL表示在此表行中没有为此人注册的父级) 并且您只查找父母的直接子项,那么查询可能如下所示:

SELECT 
    parents.id AS parent_id,
    parents.name AS parent_name,
    parents.surname AS parent_surname,
    children.id AS child_id,
    children.name AS child_name,
    children.surname AS child_surname
FROM 
    people AS parents
    LEFT OUTER JOIN people AS children
        ON children.parent_id = parents.id

我希望这至少会有所帮助。