我的手上出了问题。 我们假设我有一个表格(名称页面),其字段为 ID , PARENTID , NAME , CREATED_AT 。 PARENTID可以为NULL。 PARENTID和ID是相关的(外键),因此结构是父子,具有如下规则:如果条目具有父项,则它不能具有子项。 我需要一个查询,它将获得没有子节点的所有父条目(因此条件是PARENTID是空和(SELECT COUNT(ID)get_children_here)= 0),以及具有最新CREATED_AT日期时间的所有子条目,按CREATED_AT排序。
示例:
数据库条目是 - obj1,obj2,obj3,obj3.1,obj3.2,obj3.3,obj4,obj4.1,obj4.2,obj5。
条目obj3.1,obj3.2和obj3.3是条目obj3的子节点(因此它们的PARENTID = obj3.ID),条目obj4.1和obj4.2是条目obj4的子节点。
查询需要获取obj1,obj2,obj3.3,obj4.2和obj5(假设obj3.3和obj4.2在其父级中具有最新的CREATED_AT日期)。
我将如何做到这一点?
答案 0 :(得分:0)
管理解决它。
这是我设置的表格:
所需的结果集按正确顺序排列:
obj5,obj3-2,obj2-1,obj1,obj4
查询:
SELECT * FROM
(
SELECT c.*
FROM contracts AS c
WHERE (
c.contract_id IS NULL
AND (
SELECT COUNT(id)
FROM contracts AS c2
WHERE c2.contract_id = c.id
) = 0
)
UNION ALL
SELECT * FROM
(
SELECT c3.*
FROM contracts AS c3
WHERE contract_id IS NOT NULL
ORDER BY created_at DESC
) contracts2
GROUP BY contract_id
) AS contracts
ORDER BY created_at DESC