Как я могу выбрать, где есть конкретная ссылка в таблице ссылок или нет ссылки? - PullRequest
0 голосов
/ 25 июня 2009

У меня есть две таблицы:

Videos
--------------
VideoID
VideoGroupID
CreatorUserID

и

VideoTags
--------------
VideoID
TagID

Я хочу выбрать все идентификаторы VideoGroupID, для которых CreatorID равен 1, 2 или 3, а теги 10, 11 или 12 связаны с видео ИЛИ нет тегов, связанных с видео. Могу ли я сделать это одним запросом?

Ответы [ 2 ]

2 голосов
/ 25 июня 2009

Я думаю, что вы хотите левое соединение с нулевой проверкой

SELECT DISTINCT v.videogroupid
FROM videos v 
    LEFT JOIN videotags vt on v.videoid = vt.videoid
WHERE
    v.creatoruserid in (1, 2, 3) 
    and (
        vt.tagid is null 
        or vt.tagid in (10, 11, 12)
    )
0 голосов
/ 25 июня 2009

Это получит все из «левой» таблицы «Видео» - попробуйте сопоставить ее с таблицей VideoTags на основе VideoId. Затем результаты будут ограничены теми, в которых находится тег (10, 11, 12) или если теги не были

select *
from Videos V
left join VideoTags VT
on V.VideoId = VT.VideoId
where V.CreatorUserId in (1,2,3)
and (VT.TagId in (10, 11, 12) OR TagId is null)

Оригинальный ответ - когда описание соответствовало запросу - но это не решило вопрос

Это позволит получить все из «левой» таблицы - видео, - где CreatorId находится в (1,2,3), и сопоставить его с любыми тегами VideoTag, где находится TagId (10,11,12), если он не может совпадать с VideoTag, он вернет ноль для столбцов VideoTag

select *
from Videos V
left join VideoTags VT
on V.VideoId = VT.VideoId
and V.CreatorUserId in (1,2,3)
and VT.TagId in (10, 11, 12)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...