@MarkLb

Как получить одну любую запись из таблицы, с условием что в связанной таблице не будет записи с определенным значением?

Есть таблица `order` и связанная с ней `task`.
Мне нужно получить один любой заказ, который не выполняется определенным исполнителем(допустим, с ID: 5)

Структура и связи таблиц

PO7e8Wr.png


Я написал следующий запрос:
SELECT `order`.* FROM `order` 
LEFT JOIN `task` ON `order`.`id` = `task`.`order_id` 
WHERE (`order`.`status`=10) AND
(`order`.`type`='10') AND
(`task`.`executor_id` != 5)
LIMIT 1


Он не сработал, похоже допустим ошибку:
а) Если записей в "task" нет вовсе: никакой записи не находится.
б) Если запись в "task" есть: находится запись, которая уже давалась текущему исполнителю(executor_id).

Вопрос: Как получить одну любую запись из таблицы, с условием что в связанной таблице не будет записи с определенным значением? Может подзапрос использовать?

Вопрос в рамках данной задачи: (для простоты понимания) Как получить запись из таблицы `order`, у которой нет связанной записи в таблице `task` с определенным `task`.`executor_id`?

Пример, если запутал в терминах

У нас есть 2 заказа: "Собрать яблока", "Собрать груши" и исполнитель Петя.
Петя уже взял заказ "Собрать яблока", и просит ещё один. Давать Пете повторно заказ "Собрать яблоки" не нужно - он ведь уже его взял, значит нужно дать заказ "Собрать груши".
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Vitsliputsli
Вместо
(`task`.`executor_id` != 5)
нужно написать
(`task`.`executor_id` is null)

откуда взялось 5 совершенно непонятно.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Не скажу за mysql, но вообще современные СУБД обладают достаточным интеллектом, чтобы построить оптимальный план выполнения даже из буквального перевода описания условий
select * from tbl1 where tbl1.x not in (select  x from tabl2 where ...)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы