Учитывая набор пользовательских тегов, как определить, какие из не являются в таблице тегов с 1 оператором SQL?
Предполагая схему таблицы tags (id, tag), и я использую mysql, если есть оптимизация, о которой я не знаю.
tags (id, tag)
спасибо
SELECT Tag FROM UserSpecifiedTags LEFT OUTER JOIN AllTags ON UserSpecifiedTags.Tag = AllTags.Tag WHERE AllTags.Tag IS NULL
Это должно вернуть то, что вы хотите. По моему опыту, выполнение объединения и поиск строк, у которых нет соответствия, на намного быстрее, чем с использованием оператора IN.
IN
select * from canonical_list_of_tags where tag not in (select tag from used_tags)
По крайней мере, это работает в T-SQL для SQL Server ...
Редактировать: Предполагая, что таблица canonical_list_of_tags заполнена с результатом " С учетом коллекции пользовательских тегов "
canonical_list_of_tags
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)
Я добавил связанный вопрос