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 [列] LIKE [その他の列] + '%'

また、現在の計画における主要なパフォーマンスの問題も指摘したいと思います。次のように、検索で最初のワイルド カードを使用しようとしています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 に答える