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