コンテンツにタグを付けるための次の3つのテーブルがあり、各コンテンツに1対多のタグを付けることができます。たとえば、コンテンツレコードにCaliforniaとVariableのタグを付けることができます。
内容のある表
Content
-ContentID
-ContentName
タグ付きのテーブル
Tag
-TagID
-TagName
コンテンツとタグをリンクするテーブル
ContentTag
-ContentID
-TagID
次のSELECTステートメントを使用して、TagIDが21と54の両方のレコードを取得したいのですが、行は返されません。
SELECT * FROM ContentTag
INNER JOIN Content On ContentTag.ContentID=Content.ContentID
INNER JOIN Tag ON ContentTag.TagID=Tag.TagID
Where (Tag.TagID=21 And Tag.TagID=54)
1対多のタグを持つコンテンツを取得するSQLSELECTステートメントを作成するにはどうすればよいですか?
私は、集計とhaving
句を使用してこの質問にアプローチするのが好きです。
SELECT c.ContentId, c.ContentName
FROM ContentTag ct INNER JOIN
Content c
On ct.ContentID = c.ContentID
WHERE ct.TagID IN (21, 54)
GROUP BY c.ContentId, c.ContentName
HAVING COUNT(Distinct ct.TagId) = 2;
いくつかの注意:
join
タグテーブルへのは必要ありません。にあるIDを使用していContentTag
ます。*
。あなたは2つのタグを持つコンテンツを探していると思います。WHERE
句は、タグを問題の2つのタグに制限します。HAVING
条項は、両方が存在することを確認します。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加