前提
以下のテーブル・データが存在している状態です。
ARTICLESテーブル(記事のテーブル)
ARTICLE_ID | ARTICLE_NAME |
---|---|
1 | 記事1 |
2 | 記事2 |
3 | 記事3 |
4 | 記事4 |
5 | 記事5 |
TAGSテーブル(タグのテーブル)
TAG_ID | TAG_NAME |
---|---|
1 | タグ1 |
2 | タグ2 |
3 | タグ3 |
4 | タグ4 |
5 | タグ5 |
TAG_ARTICLE_RELATIONSテーブル(記事に紐づくタグのテーブル)
ID | ARTICLE_ID | TAG_ID |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
4 | 2 | 2 |
5 | 2 | 4 |
6 | 3 | 5 |
7 | 4 | 2 |
8 | 5 | 2 |
9 | 5 | 3 |
実現したいこと
記事のタグ(TAG_ID)検索で指定したタグを含む記事と記事(ARTICLE_ID)に関連した全てのタグ(TAG_ID)を取得するSQL文を知りたいです。
例えば、以下の条件で各結果を得られるSQL文を教えていただきたいです。
例1:全ての記事(条件なし)
ARTICLE_ID | TAG_IDS |
---|---|
1 | 1,2,3 |
2 | 2,4 |
3 | 5 |
4 | 2 |
5 | 2,3 |
例2:タグ2を含む全ての記事
ARTICLE_ID | TAG_IDS |
---|---|
1 | 1,2,3 |
2 | 2,4 |
4 | 2 |
5 | 2,3 |
例3:タグ1もしくはタグ3を含む全ての記事
ARTICLE_ID | TAG_IDS |
---|---|
1 | 1,2,3 |
5 | 2,3 |
実現したいことに対して
そもそもの取得方法やテーブル構造を変えた方が良いなどありましたら
その点もご教示いただけましたら幸いです。
試したこと
以下SQLを試してみましたが、「実現したいこと」の例2,例3と同様の取得結果が得られませんでした。
・例2:
SQL
1SELECT 2 TAG_ARTICLE_RELATIONS.ARTICLE_ID, 3 GROUP_CONCAT(DISTINCT TAG_ARTICLE_RELATIONS.TAG_ID SEPARATOR ',') AS TAG_IDS 4FROM 5 TAG_ARTICLE_RELATIONS 6WHERE 7 TAG_ARTICLE_RELATIONS.TAG_ID in (2) 8GROUP BY 9 TAG_ARTICLE_RELATIONS.ARTICLE_ID 10;
取得結果
ARTICLE_ID | TAG_IDS |
---|---|
1 | 2 |
2 | 2 |
4 | 2 |
5 | 2 |
↑指定したタグ以外のタグが取得できていない
・例3:
SQL
1SELECT 2 TAG_ARTICLE_RELATIONS.ARTICLE_ID, 3 GROUP_CONCAT(DISTINCT TAG_ARTICLE_RELATIONS.TAG_ID SEPARATOR ',') AS TAG_IDS 4FROM 5 TAG_ARTICLE_RELATIONS 6WHERE 7 TAG_ARTICLE_RELATIONS.TAG_ID in (1, 3) 8GROUP BY 9 TAG_ARTICLE_RELATIONS.ARTICLE_ID 10;
取得結果
ARTICLE_ID | TAG_IDS |
---|---|
1 | 1,3 |
5 | 3 |
↑こちらも指定したタグ以外のタグが取得できていない
補足情報(FW/ツールのバージョンなど)
MySQL 5.7.25
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/11 12:15
2020/07/11 12:50