在另一列上使用LIKE

时间:2012-01-11 08:19:08

标签: mysql sql sql-like

在表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, '%')

我做错了什么?

3 个答案:

答案 0 :(得分:7)

如果您发布错误,我会帮助您,但在选择列表后面有一个额外的逗号。此外,您可能需要限定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。

警告:当标记为413,14,15中有4)时,此联接将会显示为14,因此,除非您的ID都小于10,否则我需要重新考虑你的加入标准。

答案 1 :(得分:1)

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

怎么样

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

这应该有效(再次,取决于你的DBMS),但你应该真正规范化你的数据,这种类型的东西实际上不会扩展/表现良好。

答案 2 :(得分:1)

尝试以下查询。

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