这是我的表格(活动)内容。 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。
答案 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 = 1
(e2.eventID IS NOT NULL
)的子项相关。< / p>