1

私は自分の家のディスコグラフィーを構築しているという個人的なプロジェクトを持っています。クエリを実行する方法を理解しようとしています。私は5つのテーブルを持っています:

アルバム

albumid   name 
------------------
1         name1
2         name2    
3         name3    
4         name4    
5         name5    
6         name6     
7         name7  

ディスクフォーマット

formatid    format
-----------------------
1           CD
2           DVD
3           CASSETTE

ラベル

labelid    label
------------------------
1           SONY
2           EMI
3           COLUMBIA
4           PHANTOM
5           UNIVERSAL

アルバム_ディスク

(アルバムには複数のディスクが含まれ、ディスクは 1 つのアルバムにのみ属します。ディスクには 1 つのフォーマットしかありません)

discid  albumid    formatid
---------------------------
1        1         1
2        1         2
3        7         3
4        5         1

アルバムラベル

(アルバムには複数のレコード ラベルがあり、レコード ラベルは多くのアルバムに存在する可能性があります)

albumid   labelid
-----------------
1         1
1         4
5         5
4         1

ピックアルバム1としましょう。結果が次のようになっていることを確認したいと思います。

albumid  name     format     label
-------------------------------------------
1        name1    CD, DVD    SONY, PHANTOM

グループ連結を使用してみましたが、「フォーマット」でしか機能しません。ラベルに別のグループ連結を追加すると、機能しません。おそらく解決策は subqueries を使用していると読んだことがありますが、すべての組み合わせを試しましたが、私は初心者なので、あまり成功していません。の2つの組み合わせを使用できますgroup_concatか? そうでない場合、どうすればいいですか?

ありがとう、
マルコ

4

1 に答える 1

3

すべてのテーブルを結合する必要があります。GROUP_CONCATwithDISTINCTを使用して一意の値のみを選択)を使用し、それらをalbumIDでグループ化します

SELECT  a.albumID, a.Name,
        GROUP_CONCAT(DISTINCT c.format) formats,
        GROUP_CONCAT(DISTINCT e.`label`) labels
FROM    album a
        INNER JOIN album_disc b
            ON a.albumID =  b.albumid
        INNER JOIN discformat c
            ON b.formatid = c.formatID
        INNER JOIN album_label d
            ON a.albumid = d.albumID
        INNER JOIN label e
            ON e.labelid = d.labelid
WHERE a.albumID = 1         // remove this line if you want to select all records
GROUP BY a.albumID, a.Name

SQLFiddleデモ

于 2012-10-22T04:03:11.747 に答える