我手上有问题。
假设我有一个表(将其命名为页面),其中包含字段ID,PARENTID,NAME,CREATED_AT。
PARENTID可以为NULL。 PARENTID和ID是相关的(外键),因此结构为父子关系,规则是,如果条目具有父项,则不能有子项。
我需要一个查询,该查询将获取所有没有子项的父项(因此条件是PARENTID IS NULL AND(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日期)。

我将如何去做?

最佳答案

设法解决它。

这是我设置的表:



所需的结果集以正确的顺序排列:

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

09-25 19:25