sql - 在self refrenced表中获取带或不带child的parentID

时间:2016-03-18 15:49:32

标签: mysql sql self-referencing-table

这是我的表格(活动)内容。 eventID是"主键"和parentID是"外键"引用事件(eventsID)

自引用表:

    eventID eventName parentID appFK
    1       evt1      null     2
    2       evt2      1        1
    3       evt3      1        1
    4       evt4      null     3
    5       evt5      8        3
    6       evt6      null     4
    7       evt7      null     1
    8       evt8      null     1

和另一个表格内容(应用程序)如下:

    
    appID appName 
    1     app1      
    2     app2      
    3     app3      
    4     app4

我想使用给定的appID获取父母与否的所有eventID。如果孩子有给定的appID,我想获得他的父母ID,而不是他自己。因此appID = 1的结果将是这样的:

    eventID eventName ParentID appFK
    1       evt1      null     2     // parent event who has children with appID = 1
    7       evt7      null     1     // event with no child and appID = 1
    8       evt8      null     1     // parent event with appID = 1 and has a child

我尝试了很多例子并在这里阅读了很多解决方案,但我没有找到这样的问题。你能帮我写出正确的SQL吗?

THX。

1 个答案:

答案 0 :(得分:3)

试试这个:

SELECT DISTINCT COALESCE(e2.eventID, e1.eventID), 
       COALESCE(e2.eventName, e1.eventName),
       COALESCE(e2.appFK, e1.appFK)
FROM events AS  e1
LEFT JOIN events AS e2 ON e1.parentID = e2.eventID AND e1.appFK = 1
WHERE (e1.appFK = 1 AND e1.parentID IS NULL) OR (e2.eventID IS NOT NULL)

LEFT JOIN提取appID = 1(e1.parentID = e2.eventID)的孩子的记录(e1.appFK = 1)。

WHERE子句选择具有appID = 1 根记录的根记录,这些记录与具有appID = 1e2.eventID IS NOT NULL)的子项相关。< / p>

Demo here