Задать вопрос
@AlexRas

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

Всем привет.

Первая таблица pay:
id
1
2
3


Вторая таблица pay_service:
id | pay_id | service
1 | 1 | cert
2 | 1 | dipl
3 | 2 | cert


Делаю запрос:
SELECT `pay`.*
FROM `pay`
LEFT JOIN `pay_service` ON `pay_service`.`pay_id` = `pay`.`id`
WHERE IFNULL(`pay_service`.`service`, '') NOT IN ('dipl')
GROUP BY `pay`.`id`


Возвращается строки таблицы pay с id:
1, 2, 3

Нужны результаты с id:
2, 3

Нужны записи у которых нет в связанной таблице service = dipl. Можно ли как-то модернизировать подобный запрос? Знаю что есть другие запросы которые вернут правильный результат, но интересует именно возможность это сделать подобным запросом.

Пример рабочих запросов, но они не подходят:
SELECT `pay`.*
FROM `pay`
LEFT JOIN `pay_service` ON `pay_service`.`pay_id` = `pay`.`id` AND `pay_service`.`service` IN ('dipl')
WHERE IFNULL(`pay_service`.`service`, '') NOT IN ('dipl')
GROUP BY `pay`.`id`

SELECT `pay`.*
FROM `pay`
WHERE `id` NOT IN (SELECT `pay_id` FROM `pay_service` WHERE `pay_service`.`service` IN ('dipl'))
GROUP BY `pay`.`id`

SELECT `pay`.*
FROM `pay`
LEFT JOIN `pay_service` ON `pay_service`.`pay_id` = `pay`.`id`
GROUP BY `pay`.`id`
HAVING CONCAT('|', GROUP_CONCAT(IFNULL(`pay_service`.`service`, '') SEPARATOR '|'), '|') NOT LIKE ('%|dipl|%')
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Средний 14 комментариев
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы