1

私はpostgreSQL 9.3で作業しています。

私の質問は少し主観的だと言いたいのですが、関連する質問や記事は見つかりませんでした...

次のように3つのテーブルがあります。

アーティスト:

+--------+----------+
|artistId|   name   |
+--------+----------+
| 1      | James    |
| 2      | Jack     |
| 3      | Henry    |
| 4      | Tom      |
+--------+----------+

ジャンル:

+---------+-----------+
| genreId |    name   |
+---------+-----------+
|   1     |   rock    |
|   2     |   dub     |
+---------+-----------+

ジャンクション テーブルの artistGenres:

+--------+---------+
|artistId| genreId |
+--------+---------+
|      1 |     1   |
|      2 |     2   |
|      3 |     1   |
|      4 |     2   |
+--------+---------+

すべてのアーティストをジャンル名で取得したい。現時点では、次のようにします。

SELECT a.*
FROM artistsGenres aG
  INNER JOIN artists a ON a.artistId = aG.artistId
WHERE aG.genreId = (SELECT genreId FROM genres WHERE name = 'dub');

もっと効率的な方法はないか考え中です。

4

2 に答える 2

0
SELECT *
FROM artists a
WHERE EXISTS (
  SELECT 1
  FROM artistsGenres aG
  JOIN genres g ON g.genreId = aG.genreId
  WHERE aG.artistId = a.artistId 
  AND g.name = 'dub'
  );
于 2015-04-04T12:27:06.303 に答える