Запросить проверку в другом и принести отфильтрованные данные PostgreSql - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно сгруппировать все результаты внешней таблицы и вернуть только тех пользователей, у которых нет завершенного статуса

У меня следующий запрос.

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 |

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Мне удалось отфильтровать результаты следующим образом

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
)
0 голосов
/ 30 апреля 2019

Следующий запрос работает на вашем примере таблицы.(в тексте "EJ:")

SELECT * FROM tasks_data
WHERE user_id NOT IN (
  SELECT user_id FROM tasks_data WHERE status = 'Complete'
)
AND task_id = 46337;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...