2010-08-14 5 views
2

저는 MySQL에 비교적 익숙하지 않으며이를 수행하는 방법을 찾기 위해 애 쓰고 있습니다. 나는 합류 등을 연구했지만 이것을 어떻게 적용해야할지 모르겠습니다.MySQL 관계형 뷰 - 가입 하시겠습니까?

연예인 표 ID, 이름, 설명

앨범 표 ID, 제목, 년, Artist_ID

트랙 :

나는 세 개의 테이블을 가지고 표 ID, 제목, 앨범 _ID

트랙은 앨범에 할당되고 앨범은 아티스트에게 할당됩니다. (필자는 phpmyadmin의 관계 뷰를 통해이를 수행했으며 엔진은 InnoDB 임).

내가하려는 것은 특정 아티스트의 모든 트랙 (ID에서)을 쿼리하는 것입니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까? 미리 감사드립니다!

답변

1

사용 :

SELECT  tracks.title 
FROM  tracks 
INNER JOIN albums ON (albums.id = tracks.album_id) 
INNER JOIN artists ON (artists.id = albums.artist_id) 
WHERE  artists.name = 'A particular arist name'; 

참고 JOIN는 것을 :

SELECT t.title 
    FROM TRACKS t 
    JOIN ALBUMS al ON al.id = t.album_id 
WHERE al.artist_id = ? 
0
SELECT track.* 
FROM artists, albums, tracks 
WHERE artist.ID = 123 
    AND artist.id = albums.artist_ID 
    AND albums.id = tracks.Album_ID 
1

는 다음과 같은 시도 할 수 있습니다 :

SELECT t.title 
    FROM TRACKS t 
    JOIN ALBUMS al ON al.id = t.album_id 
    JOIN ARTISTS a ON a.id = al.artistid 
WHERE a.name = ? 

당신은 이미 artists.id 값이있는 경우 동의어 INNER JOIN. 기본적으로 가장 일반적인 조인 유형 인 내부 조인 작업을 사용하여 간단한 join syntax을 사용하고 있습니다. 이것이 올바른 방향으로 나아갈 수 있기를 바랍니다.

2

암시 적 조인 구문 사용 : 중첩 된 서브 쿼리와

SELECT * FROM Artists 
    LEFT JOIN Albums ON Artists.ID=Albums.Artist_ID 
    LEFT JOIN Tracks ON Tracks.Album_ID=Albums.ID 
    WHERE Name='foo' 

또는 : 명시 적으로

SELECT * FROM Tracks, Artists, Albums 
    WHERE Tracks.Album_ID=Albums.ID AND Albums.Artist_ID=Artists.ID 
    AND Artists.Name='foo' 

이들의

SELECT * FROM Tracks WHERE Album_ID IN 
    (SELECT ID FROM Albums WHERE Artist_ID IN 
     (SELECT ID FROM Artists WHERE Name='foo'))` 

세 가지가 동일 (의 부재를 NULL 값). 대부분의 SQL 전문가가 선택한 것으로 보이는 두 번째 SQL 문을 사용하는 것이 좋습니다.