如何仅通过连接表显示具有相同值的一行

时间:2013-05-12 16:14:54

标签: mysql jointable

我有艺术家的身份,我想知道这位艺术家发布的所有专辑。

MySQL结构

MySQL structure

示例Mysql查询

SELECT album_name 
FROM albums AS a, 
     tracks AS t, 
     produced AS p 
WHERE p.produced_track = t.track_id 
  AND t.track_album = a.album_id 
AND p.produced_artist = "17"

问题

由于一张专辑有很多曲目,我的结果会显示几张相同的专辑。为了制作唱片,我想要获得艺术家的所有专辑。 有没有办法在MySQL中做到这一点?

3 个答案:

答案 0 :(得分:2)

只需使用SELECT DISTINCT

SELECT DISTINCT album_name 
FROM albums AS a, 
 tracks AS t, 
 produced AS p 
WHERE p.produced_track = t.track_id 
AND t.track_album = a.album_id 
AND p.produced_artist = "17"

应该这样做......

答案 1 :(得分:2)

您也可以使用子查询

,而不是检索太多行并删除重复项
SELECT album_name 
FROM albums AS a
WHERE album_id IN (SELECT t.track_album
                   FROM tracks t
                      JOIN produced AS p ON p.produced_track = t.track_id 
                   WHERE p.produced_artist = 17)

您还应该习惯使用显式JOIN语法而不是WHERE子句中隐藏的隐式连接

答案 2 :(得分:1)

您应该尝试:SELECT DISTINCT album_name FROM albums AS a, tracks AS t, produced AS p WHERE p.produced_track = t.track_id AND t.track_album = a.album_id AND p.produced_artist = "17"