mysql запрос антисоединения "один ко многим" - PullRequest
0 голосов
/ 04 августа 2020

Ищу помощь с запросом в этой ситуации:

У меня 3 таблицы. Стол для обуви - это уникальная коллекция моделей обуви. Таблица цветов - это уникальная коллекция цветов, которые могла бы иметь обувь. Таблица shoe_color - это таблица соединений. Одна модель обуви может иметь несколько цветов или только один.

Я хочу запросить модели обуви, которые не содержат определенного цвета. Например ... Shoe 1 имеет цвета black, red, white. Shoe 2 имеет цвета black, white. Shoe 3 имеет цвета black, white. Запрос для не содержит цвета red, должен возвращать строки: Shoe 2 и Shoe 3.

Любая помощь приветствуется, и, пожалуйста, задавайте любые вопросы для уточнения!

1 Ответ

1 голос
/ 04 августа 2020

Вы можете использовать not exists.

Предполагая, что объединенная таблица ссылается на другие таблицы через их первичный ключ (скажем, color_id и shoe_id), а этот столбец color_name в таблице color сохраняет название цвета, вы должны go:

select s.*
from shoe s
where not exists (
    select 1 
    from shoe_color sc 
    inner join color c on c.color_id = sc.color_id
    where sc.shoe_id = s.shoe_id and c.color_name = 'red'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...