在另一个内部查询验证并带来过滤后的数据PostgreSql

问题描述 投票:0回答:2

我需要对外部表的所有结果进行分组,并仅返回没有完成状态的用户

我有以下查询。

SELECT * from tasks
  LEFT JOIN (SELECT td.task_id, td.user_id FROM tasks 
  LEFT JOIN tasks_data td ON tasks.id = td.task_id AND td.status 
    NOT IN ('Complete')) tasks_data ON tasks_data.task_id = tasks.id
WHERE tasks.id=46337;

数据库中的关系如下:

任务有很多用户。用户有很多评论。 (tasks_data)

我需要让所有未输入状态的用户完成

EJ:

| Task_id | User_id | Status   |
|---------|---------|----------|
| 46337   | 158     | Pending  |
| 46337   | 1       | Pending  |
| 46337   | 158     | Complete |
| 46337   | 55      | Pending  |
| 46337   | 58      | Pending  |
| 46337   | 1       | Complete |

您应该收到以下结果:

| Task_id | User_id | Status  |
|---------|---------|---------|
| 46337   | 55      | Pending |
| 46337   | 58      | Pending |
postgresql group-by
2个回答
0
投票

以下查询适用于您的示例表。 (在“EJ:”文本下)

SELECT * FROM tasks_data
WHERE user_id NOT IN (
  SELECT user_id FROM tasks_data WHERE status = 'Complete'
)
AND task_id = 46337;

0
投票

我设法按如下方式过滤结果

select *
from tasks
left join tasks_users tu on tasks.id = tu.task_id
left join tasks_data td ON td.task_id=tasks.id
WHERE
tu.user_id NOT IN (
  SELECT user_id FROM tasks_data WHERE tasks_data.status = 'Complete' and tasks_data.task_id = tasks.id
)
© www.soinside.com 2019 - 2024. All rights reserved.