【问题标题】:SELECT rows from table PLUS rows pertaining to selected rows in one query从表中选择行加上与一个查询中的选定行有关的行
【发布时间】:2019-10-02 13:24:40
【问题描述】:

有没有办法从一个表中检索一组行,但也包括来自同一个表的(连接、联合?)行,其 id 在初始选择中被引用?这是一个例子。

ID       Name       Surname         UserID    ParentID
---------------------------         ------------------
1        Daniel     Brown           1         0
2        John       Brown           2         4
3        Andrew     Brown           3         5
4        Simon      Smith           4         0
5        Peter      Smith           5         1

所以我想检索姓氏为 Brown 的所有行,以及与父值有关的所有行。在此示例中,将返回所有行。

如果可能的话,我想在一个查询中执行此操作。请注意,我也不想返回 Peter Smith 的父行 (1)。只是最初的搜索(所有布朗)和最初搜索的相关父母。

【问题讨论】:

    标签: mysql join union


    【解决方案1】:

    你可以试试下面-

    DEMO

    select id,name,surname,parent from tablename
    where surname='Brown'
    union 
    select a1.id,a1.name,a1.surname,a1.parent from tablename a join tablename a1
    on a.parent=a1.id
    where a.surname='Brown'
    

    输出:

    id  name    surname parent
    1   Daniel  Brown   0
    2   John    Brown   5
    3   Andrew  Brown   4
    4   Simon   Smith   0
    5   Peter   Smith   1
    

    【讨论】:

    • 忽略前面的评论; +1;你需要 UNION 而不是 UNION ALL,因为如果更多人有相同的父母,可能会出现重复
    • 这很好,但我可能过度简化了这个问题,因为实际上,parentID 列是从单独的表中连接的,因此无法用于联合。我将更新问题以反映稍微复杂的情况。
    猜你喜欢
    • 2012-10-15
    • 2015-02-12
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多