Выберите откуда не в - кроме
-
23-12-2019 - |
Вопрос
У меня есть две связанные таблицы. Одним из таблиц содержит каждую запись для фотографий, а другой имеет все записи CAT для каждой фотографии и информации о пользователе.
photos table:
id
photo (unique filename)
user
cats tables
photo
user
cat
.
Фотографии
1 photo1.jpg 40000
2 photo2.jpg 40000
3 photo3.jpg 40000
4 photo4.jpg 40001
5 photo5.jpg 40001
.
Кошки
photo1.jpg 40000 A
photo2.jpg 40000 A
photo1.jpg 40000 B
photo1.jpg 40000 C
photo2.jpg 40000 P
photo3.jpg 40000 A
.
Каждое фото можно назначить более крупным категориям для каждого пользователя
Что я хочу, это выбрать все фотографии для пользователя 40000, которые не были включены в «P», даже если они, возможно, были включены в «A» или «B» Cat.
Потому что photo2.jpg включен в P Cate не должен появляться в результатах поиска. Мой запрос для пользователя 40000 должен дать результаты результатов:
photo1
photo3
. Решение
должен быть простым левым присоединением / нулевым тестом
select
p.id,
p.photo
from
photos p
left join cats c
on p.photo = c.photo
AND c.cat = 'P'
where
p.user = 40000
and c.photo is null
.
В основном левое соединение все еще позволяет всем фотографиям быть квалифицированным.Однако, если присоединение специально существует в таблице категорий на одной и той же фотографии и категории= «P», то она будет иметь значение для «C.Photo».Таким образом, в том случае, в том случае, если я добавил только те, которые не существуют (через NULL), существуют в таблице Cat.
Другие советы
mysql> select * from photos
where photo not in (select photo from cats where cat='P')
and user = '40000';
.