将列的值添加到LIKE语句中?

时间:2010-03-05 16:38:44

标签: sql sql-like

我有3个表格用于标签,标签类别和使用过的标签。我想获得所有标签的列表,其中包含已使用标签的数量(所使用的标签格式是每个带标签的文档ID的逗号分隔值)。

我一直在尝试这样的事情,但我无法获得要插入LIKE语句的tags.tag字段的值。

SELECT categories.category, tags.tag,
(SELECT COUNT(id) FROM usedtags WHERE usedtags.value LIKE '%tags.tag%') as numtags
FROM tags
LEFT JOIN categories ON categories.id = tags.category_id
ORDER BY categories.category, tags.tag

必须有更好的方法来做到这一点,但我的SQL不够好!!

有人可以指出我正确的方向吗?

非常感谢

2 个答案:

答案 0 :(得分:2)

这样的事情,也许是:

  

WHERE [column] LIKE [OtherColumn] +'%'

我还想指出当前计划中的一个主要性能问题。您尝试在搜索中使用初始外卡,如下所示:LIKE '%tags.tag%'。这非常糟糕,因为它不适用于您的索引。我们会说它不是 sargable 。每当你发现自己想要使用这样的初始外卡时,你应该看一下full-text index。它并不难,会显着提高您的数据库性能。

答案 1 :(得分:1)

可能是这样的:

SELECT c.Category, t.tags, count(u.id)
FROM Tags T
Left Join Categories c on c.id = t.category_id
Inner Join UsedTags u on u.value like '%' & t.tag & '%'

&&可能需要由您的特定数据库替换(例如在T-SQL中它是双管||)