@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|%')
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vapaamies
@Vapaamies
В творческом кризисе
select * from pay where not exists (
  select null from pay_service where pay_id = pay.id and service in ('dipl')
)
Ответ написан
Ваш ответ на вопрос

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

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