Учитывая набор тегов, указанных пользователем, как определить, какие не в таблице тегов, с помощью 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>