MYSQL - получить список элементов в A, если они не имеют ЛЮБОГО совпадения в таблице B с определенным условием - PullRequest
0 голосов
/ 30 января 2019

Например,

У меня есть таблицы Пользователь и UserColor

Каждый пользователь может иметь много цветов.

Iхотите получить результат "все пользователи, кроме тех, которые любят красный или синий".

Есть ли способ сделать это без необходимости делать два вложенных выбора?

то есть

Select * from User where id not in (
Select user_id from UserColor where  color = Red OR color = Blue )

?

Я спрашиваю об этом, потому что мне нужно также отфильтровать пользователей с помощью свойства Letter = A.

Я могу просто поместить букву Where = A в конце, однако это будет означать, что мне нужносделать объединение для ВСЕХ пользователей с их цветами, прежде чем отфильтровать небольшую группу A.

Так что я бы лучше сначала отфильтровал пользователей с помощью A, а затем по цвету.

Таким образом, яделать что-то вроде:

Select * from User where id not in (
    Select user_id from UserColor 
    Left join User ON User.id = user_id 
    where color == Red OR color = Blue AND User.letter = 'A')
AND letter = 'A'

задница кажется повторяющейся, чтобы фильтровать 2 раза по букве A (один, чтобы получить пользователей, которые соответствуют хотя бы один раз, а другой, чтобы получить всех пользователей, которые не 'т в этой группе)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...