Какие тэги нет в базе данных?

Учитывая набор тегов, указанных пользователем, как определить, какие не в таблице тегов, с помощью 1 SQL Statement?

Предполагая схему таблицы tags (id, tag), и я использую mysql, если есть оптимизация, о которой я не знаю.

спасибо

Ответ 1


SELECT  Tag
FROM    UserSpecifiedTags
  LEFT OUTER JOIN AllTags ON UserSpecifiedTags.Tag = AllTags.Tag
WHERE   AllTags.Tag IS NULL

Это должно вернуть то, что вы хотите. По моему опыту, выполнение соединения и поиск строк, которые не имеют соответствия, намного быстрее, чем при использовании оператора IN.

Ответ 2

select * from canonical_list_of_tags where tag not in (select tag from used_tags) 

По крайней мере, это работает в T-SQL для SQL Server...

Изменить: Предполагая, что таблица canonical_list_of_tags заполняется результатом "Учитывая коллекцию указанных пользователем тегов"

Ответ 3

select
    utt.tagName
from
    userTypedTags utt
    left join tag t on utt.tagName = t.tag
where
    t.ID is null
    and utt.userID = <ID of the User in question>

Это предполагает, что у вас есть таблица

userTypedTags(userID, tagName)

Я добавил вопрос