给定用户指定标签的集合,如何使用1个SQL语句确定标签表中哪些不?
假设一个表模式tags (id, tag)
并且我正在使用mysql,如果有一个我不知道的优化。
感谢
答案 0 :(得分:4)
SELECT Tag
FROM UserSpecifiedTags
LEFT OUTER JOIN AllTags ON UserSpecifiedTags.Tag = AllTags.Tag
WHERE AllTags.Tag IS NULL
这应该返回你想要的东西。根据我的经验,执行联接并查找没有匹配的行比使用IN
运算符更快 。
答案 1 :(得分:1)
select * from canonical_list_of_tags where tag not in (select tag from used_tags)
至少适用于SQL Server的T-SQL ...
修改:假设表canonical_list_of_tags
填充了“给定用户指定标记的集合”
答案 2 :(得分:0)
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)
我添加了related question