0

次のシナリオの mysql クエリが必要です 次のデータベース構造があります

1] table 'albums'  Columns  'id', 'name'
2] table 'tracks'  Columns  'id', 'title', 'album_id'   (album has many tracks)
3] table 'assets'  Columns  'id', 'track_id'   (track has many assets)

そのアルバムのすべてのトラックに少なくとも 2 つのアセットが必要であるようなすべてのアルバムを見つけたいです。

次のテスト データ アルバムの場合

'id'    'name'
  1      Album 1
  2      Album 2

トラック

  'id'    'title'        'album_id'
   1      Track 1       1
   2      Track 2       1
   3      Track 3       2
   4      Track 4       2

資産

'id'  'track_id'
 1      1
 2      1
 3      2
 4      2
 5      3
 6      3
 7      4

だから私のクエリo/pは

'id'    'name'
  1      Album 1

としてAlbum 1 2 つのトラックがTrack 1ありTrack 2、これらのトラックの両方が持っているの2 assetsに対してTrack 4Album 21 asset

4

1 に答える 1

4

試す:

SELECT    a.id,
          a.name
FROM      albums a
JOIN      tracks b ON a.id = b.album_id
LEFT JOIN (
          SELECT   track_id
          FROM     assets
          GROUP BY track_id
          HAVING   COUNT(*) >= 2
          ) c ON b.id = c.track_id
GROUP BY  a.id, 
          a.name
HAVING    COUNT(*) = COUNT(c.track_id)

SQLFiddle デモ

于 2012-08-13T09:06:34.370 に答える