【问题标题】:using LIKE on another column在另一列上使用 LIKE
【发布时间】:2012-01-11 08:19:08
【问题描述】:

在表 tags 我有字段 id。在表tastings 中,我有一个字段tags,它是用逗号分隔的id 编号列表,例如2,4,5。数据库是 MySQL。

现在我正在尝试计算每个标签总共使用了多少次。但我被 LIKE 部分困住了。我尝试了以下方法,都给出了语法错误:

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE tags.id + '%'

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE tags.id & '%'

SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE CONCAT(tags.id, '%')

我做错了什么?

【问题讨论】:

  • 哪个 DBMS?这可能很重要。
  • 你试过了吗? SELECT tags.id、tag、FROM tags、品尝 WHERE tags LIKE '%' + tags.id + '%'
  • 我使用 MySQL。是的,我已经尝试过了。
  • SQL 连接运算符为||
  • 如果我尝试 ||我得到了奇怪的结果,它似乎与使用 CONCAT() 不一样

标签: mysql sql sql-like


【解决方案1】:

如果您发布错误,我会提供帮助,但您在选择列表后有一个额外的逗号。此外,您可能需要限定tags,因为它既是表又是列。

试试这个:

SELECT tags.id, tag
FROM tags, tastings
WHERE tastings.tags LIKE CONCAT('%', tags.id, '%')

或者更好,使用新的连接语法:

SELECT tags.id, tag
FROM tags
JOIN tastings on tastings.tags LIKE CONCAT('%', tags.id, '%')

注意%中tag.id的夹层,所以你可以在其中的任何地方找到id。

警告:当标签为 13,14,1514 中有 4)时,此连接将命中 id 4,因此除非您的 id 都小于 10,否则您需要重新考虑您的连接条件.

【讨论】:

    【解决方案2】:

    您尚未指定您的 DBMS,所以我猜测支持的内容。

    怎么样

    SELECT tags.id, tastings.tag
    FROM tags 
        INNER JOIN tastings  
            ON tastings.tags like '%' + tags.id + '%'
    

    这应该可行(同样,取决于您的 DBMS),但您应该真正规范化您的数据,这种类型的东西真的不能很好地扩展/执行。

    【讨论】:

      【解决方案3】:

      试试下面的查询。

      select t.id , count(t.id) from tag t , tastings tas where tas.tags like '%' ||t.id||'%'
      group by t.id;
      

      【讨论】:

        猜你喜欢
        • 2013-01-19
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 2017-11-23
        • 2021-07-20
        • 2022-01-18
        相关资源
        最近更新 更多