2

我有 3 个标签表、标签类别和使用过的标签。我想获取所有标签的列表,其中包含已使用标签的计数(所用标签的格式是每个具有标签的文档 id 的逗号分隔值)。

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

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 还不够好!!

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

非常感谢

4

2 回答 2

2

像这样的东西,也许:

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

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

于 2010-03-05T16:45:07.657 回答
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 中,它是双管道 ||)

于 2010-03-05T16:45:44.330 回答