【问题标题】:Get row from database that has tag从具有标签的数据库中获取行
【发布时间】:2026-01-20 01:50:01
【问题描述】:

我在数据库中有标签列,用逗号分隔:“绿色、大、强”。我知道这不是在数据库中存储标签的最佳方式,我稍后会更改它,但现在我真的需要找出如何获取具有特殊标签的行。 例如,在第一行列标签是“绿色、大、强”。第二行是“白色,大,强y”。 当我使用

"SELECT * FROM tablename WHERE tags LIKE '%strong%'"

它返回第一列和第二列(因为strongy),但我只需要第一列

【问题讨论】:

    标签: sql database sqlite tags


    【解决方案1】:

    我会这样做:

    SELECT *
    FROM tablename
    WHERE ',' || tags || ',' LIKE '%,strong,%';
    

    也就是说,只需添加分隔符,这样搜索就不会产生歧义。

    【讨论】:

      【解决方案2】:

      像这样将输出限制为 1:

      SELECT * FROM tablename WHERE tags LIKE '%strong%' LIMIT 1
      

      还可以按 ID 等特定列排序,如下所示:

      SELECT * FROM tablename WHERE tags LIKE '%strong%' ORDER BY column_name LIMIT 1
      

      与 LIKE 一起使用时,括号指定范围。您可以使用 ESCAPE 关键字。

      WHERE mycol LIKE '%\[126\]%' ESCAPE '\';
      

      当然,如果你想匹配一个精确的字符串,你就不需要 LIKE,或者你可以去掉 % 字符,LIKE 会表现得像 =(这样可以灵活地将通配符或精确匹配传递给参数)。

      【讨论】:

      • 如果带有“strongy”的标签会早于“strong”怎么办?它只会显示“强”行吗?我需要带有“强”标签的行。
      • 使用 '%strong%' 应该可以找到整个单词“strong”。我认为它不应该找到“stron”或不完整的词。
      • 对不起,我在上面的评论中打错了。是“强”,而不是“强”
      • 我不明白如何在括号中使用它:c 你能告诉我“强”字的完整查询吗?
      • 好的,让我解释一下最终代码在我的回答中的作用。这类似于 = 你找不到 123 但只有 126。用你的字符串替换它,它应该可以工作:P