У меня три таблицы Post
, PostTagMap
и Tag
. PostTagMap
- это таблица соединений для отображения одного сообщения с несколькими тегами. Я пытаюсь написать запрос, чтобы вытащить все сообщения, принадлежащие тегу name .
Почтовый стол
Id Name
1 Post #1
2 Post #2
Таблица тегов
Id Name
1 JS
2 CSS
Таблица PostTagMap
Id PostId TagId
1 1 1
2 1 2
(отредактированные данные PostTagMap для соответствия рассматриваемой проблеме)
SELECT P.Id FROM Post P
LEFT JOIN PostTagMap PTM ON P.Id = PTM.PostId
INNER JOIN Tag T ON PTM.TagId = T.Id
WHERE T.Name = ISNULL(@Tag, T.Name)
Когда @Tag
равно NULL
Я получаю только детали идентификатора записи 1, а не 2. Что не так с приведенным выше запросом?
Пробовал и ниже,
SELECT P.Id FROM Post P
LEFT JOIN PostTagMap PTM ON P.Id = PTM.PostId
LEFT JOIN Tag T ON PTM.TagId = T.Id
WHERE T.Name = ISNULL(@Tag, T.Name)
Выше также не возвращаются детали сообщения 2.
SELECT P.Id FROM Post P
LEFT JOIN PostTagMap PTM ON P.Id = PTM.PostId
LEFT JOIN Tag T ON PTM.TagId = T.Id AND T.Name = ISNULL(@Tag, T.Name)
Возвращая все, даже передавая @Tag как "JS".