我正在使用 postgreSQL 9.3。
我想说我的问题有点主观,但我没有找到任何相关的问题或文章...
我有如下三个表:
艺术家:
+--------+----------+
|artistId| name |
+--------+----------+
| 1 | James |
| 2 | Jack |
| 3 | Henry |
| 4 | Tom |
+--------+----------+
流派:
+---------+-----------+
| genreId | name |
+---------+-----------+
| 1 | rock |
| 2 | dub |
+---------+-----------+
和联结表艺术家流派:
+--------+---------+
|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');
我想知道是否有更有效的方法来做到这一点?
最佳答案
一般来说,如果可以通过连接完成,最好不要使用子查询。然而,幸运的是,查询规划器为您重写了子查询作为连接!这是您自己制作的样子。
SELECT a.*
FROM artistsGenres aG
INNER JOIN artists a ON a.artistId = aG.artistId
INNER JOIN genres g ON g.genreId=aG.genreId
WHERE g.name='dub'
您执行连接的顺序并不重要,因为 postgresql 会将它们重新排序为它认为最有效的顺序。
关于postgresql - 在 postgreSQL 中使用 WHERE 子句连接三个表的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29445639/