我有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不够好!!
有人可以指出我正确的方向吗?
非常感谢
答案 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 & '%'