как отображать только одну строку с одинаковым значением через объединенные таблицы

У меня есть идентификатор исполнителя, и я хотел бы знать все альбомы, выпущенные этим исполнителем.

Структура MySQL

Структура MySQL

Пример запроса 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?


person JeremyW    schedule 12.05.2013    source источник
comment
GROUP BY album_id? Примечание. Это «убьет» все последующие результаты и отобразит альбом только один раз.   -  person Refugnic Eternium    schedule 12.05.2013


Ответы (3)


Просто используйте 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"

Это должно сделать это...

person Tasos P.    schedule 12.05.2013
comment
Это именно то, что мне было нужно! Большое спасибо! - person JeremyW; 12.05.2013

Вместо того, чтобы извлекать слишком много строк и удалять дубликаты, вы также можете использовать подзапрос

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.

person a_horse_with_no_name    schedule 12.05.2013

Вы должны попробовать: 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"

person NumberTen    schedule 12.05.2013