【问题标题】:Which tags are not in the database?哪些标签不在数据库中?
【发布时间】:2010-09-23 19:14:46
【问题描述】:

给定一组用户指定的标签,我如何使用 1 个 SQL 语句确定标签表中不是的标签?

假设一个表架构 tags (id, tag) 并且我正在使用 mysql,如果有我不知道的优化。

谢谢

【问题讨论】:

  • 原来你不能用 1 个查询来做到这一点:(

标签: sql mysql


【解决方案1】:
select * from canonical_list_of_tags where tag not in (select tag from used_tags) 

至少在用于 SQL Server 的 T-SQL 中有效......

编辑:假设表canonical_list_of_tags 填充了“给定用户指定标签的集合”的结果

【讨论】:

  • Cannonical_list_of_tags 需要是一个预先存在的表才能工作......?我是否需要清空表格,然后插入用户提供的标签才能使用?似乎它比单独迭代标签要慢?我错了吗?
  • 是的。不确定你在 MySQL 中有什么结构,但如果可能的话,循环中间的 SQL 应该被转换为单个 sql。考虑一个简单的例子,桌子很小,可以放在一个块上。如果您使用 LOOP/QUERY,您将一遍又一遍地阅读同一个块。
【解决方案2】:
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

【讨论】:

    【解决方案3】:
    
    SELECT  Tag
    FROM    UserSpecifiedTags
      LEFT OUTER JOIN AllTags ON UserSpecifiedTags.Tag = AllTags.Tag
    WHERE   AllTags.Tag IS NULL
    

    这应该返回你想要的。以我的经验,执行联接并查找不匹配的行比使用 IN 运算符要快得多。

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      相关资源
      最近更新 更多