2013-03-06 4 views
1

나는 아티스트 테이블과 아티스트 _ 앨리어스 테이블을 가지고 있습니다. artists_alias에는 아티스트의 모든 가능한 이름이 들어 있습니다.둘 이상의 행을 반환하는 하위 쿼리?

내 쿼리, 여러 아티스트의 아티스트 데이터를 잡기 위해, 다음과 같습니다

$sql = "SELECT artist.artist_id, artist.artist_name 
     FROM artists artist 
     WHERE artist.artist_id IN (3,9,500);"; 

을 지금, 나는 또한 1 일 수있다 또는 X를 내가 내에서이 정보를 가져올 수 알려진 별칭을 포함 할 위의 쿼리? 아니면 별도의 쿼리입니까?

나는 같은 일에 대해 생각했다 :

$sql = "SELECT artist.artist_id, artist.artist_name, 
     (SELECT * FROM artists_alias WHERE [???])...."; 

을하지만 오류 메시지가 "하위 쿼리보다 1 행보다 반환"- 나는 그것보다이 더 복잡하게 만드는 무엇입니까? 이것이 하나의 질의 일 수 있습니까?

예를 들어 반환 행처럼 보일 수 있도록 내가 쉼표로 구분 된 별칭을 드리겠습니다 : 3, "벤 다섯 폴드, 벤 다섯, benfolds 폴드 오 폴드", "벤은 다섯 주름"

답변

4

검색하려면 artist_alias에 대해 LEFT JOIN이 필요합니다. 또한 쉼표로 구분하려면 총 GROUP_CONCAT()을 사용하십시오.

LEFT JOIN은 아티스트가 연결된 별칭이없는 경우에도 행이 반환되도록 사용됩니다. (행 당 아티스트 정보를 복제) 별명 당

한 행 :

SELECT 
    artist.artist_id, 
    artist.artist_name, 
    /* Retrieves all cols from artists_alias. SELECT only what you need... */ 
    artists_alias.* 
FROM 
    artist 
    /* Assuming there's an artists_alias.artist_id. Substitute the correct column name */ 
    LEFT JOIN artists_alias ON artist.artist_id = artists_alias.artist_id 
WHERE artist.artist_id IN (3, 9, 500) 

또는 별명의 쉼표로 구분 된 목록 GROUP_CONCAT()를 통해 : 결국

SELECT 
    artist.artist_id, 
    artist.artist_name, 
    /* Substitute the correct column name for the actual alias */ 
    GROUP_CONCAT(artists_alias.alias) AS all_aliases 
FROM 
    artist 
    LEFT JOIN artists_alias ON artist.artist_id = artists_alias.artist_id 
WHERE artist.artist_id IN (3, 9, 500) 
GROUP BY 
    artist.artist_id, 
    artist.artist_name 
+0

아,이 위대하다! 많이 고마워! 어떤 이유로 LEFT JOIN이 모든 가치를 부여하지 않을 것이라고 생각했습니다. 어깨를 으해라. – Mike

-1

넣어 제한 1.

select * from tble 여기서 a = 1 제한 1;

+0

이것은 실제로 문제를 해결하는 것이 아니라 단지 증상을 가린다. –

2

당신은 하나의 행에있는 모든 별칭을 반환 할 경우, group_concat() 사용

SELECT a.artist_id, a.artist_name, 
     group_concat(aa.alias) as aliases 
FROM artists artist left outer join 
    artists_alias aa 
    on a.artist_id = aa.artist_id 
WHERE at.artist_id IN (3,9,500) 
group by a.artist_id, a.artist_name 
+0

감사합니다! 매우 감사! – Mike

관련 문제