Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用postgres与父级存在于同一个表中_Sql_Postgresql - Fatal编程技术网

Sql 使用postgres与父级存在于同一个表中

Sql 使用postgres与父级存在于同一个表中,sql,postgresql,Sql,Postgresql,我感兴趣的是查询PostgreSQL 8.4表以列出行,对于给定的行,如果它有任何具有特定字段值的相邻子行,则列出这些行 一个简单的例子是任务列表,其中任务可以有子任务,子任务是同一个表中由parent\u id列关联的相邻行。我想写一个查询,列出顶级任务并弹出子任务的状态。用通俗易懂的英语,“列出每一任务行的状态字段,考虑每一行的子项,如果有任何子项的状态不是“关闭的”。“一级深入的子项关系考虑很好-无需重复 以下是我到目前为止得出的结论,但即使我确定有符合条件的行,我也没有得到任何结果: S

我感兴趣的是查询PostgreSQL 8.4表以列出行,对于给定的行,如果它有任何具有特定字段值的相邻子行,则列出这些行

一个简单的例子是任务列表,其中任务可以有子任务,子任务是同一个表中由
parent\u id
列关联的相邻行。我想写一个查询,列出顶级任务并弹出子任务的状态。用通俗易懂的英语,“列出每一任务行的
状态
字段,考虑每一行的子项,如果有任何子项的状态不是“关闭的”。“一级深入的子项关系考虑很好-无需重复

以下是我到目前为止得出的结论,但即使我确定有符合条件的行,我也没有得到任何结果:

SELECT id, summary, created_at
FROM tasks
WHERE parent_id IS NULL
    AND EXISTS (
        SELECT summary
        FROM tasks
        WHERE parent_id=tasks.id
            AND status != 'closed'
    )
ORDER BY created_at DESC;

您的方法存在的问题是,首先执行子选择:

    SELECT summary
    FROM tasks
    WHERE parent_id=tasks.id
        AND status != 'closed'
你的
parent\u id=tasks.id
是一个骗人的东西。看起来您正在跨表进行比较,但实际上并没有——您正在检查每一行,其中tasks.parent\u id=tasks.id(因为这里只有一个表)。这自然意味着0行

因此,您需要消除歧义:

SELECT id, summary, created_at
FROM tasks AS parent_tasks
WHERE parent_id IS NULL
    AND EXISTS (
        SELECT summary
        FROM tasks AS child_tasks
        WHERE parent_tasks.parent_id=child_tasks.id
            AND status != 'closed'
    )
ORDER BY created_at DESC;

使用任务t中的别名
(…其中t.parent\u id=…和t.status)