2014-06-14 3 views
2

저는 아티스트, 밴드 및 앨범에 대한 정보를 저장하는 데이터베이스가 있으며 두 개 이상의 앨범이있는 밴드의 밴드 이름과 앨범 제목을 선택하려고합니다.하위 쿼리와 관련된 쿼리

band_id, name, year_formed 
1, blink182, 1990 
2, fall out boy, 1997 
3, u2, 1982 
4, coldplay, 1990 
5, zach brown band, 2002 

이 너무 어려운 문제가 보이지 않는다하지만 난 내 인생을 알아낼 수 없습니다

album_id, title, band_id 
1, take off your pants and jack it, 1 
2, stars, 3 
3, fbgm, 3 
4, reach, 3 
5, yup, 4 

앨범. 문제는 select 문에서 앨범 제목과 밴드 이름을 모두 가져 오는 것과 같습니다.

SELECT b.name, alb.title 
FROM band as b, album as alb 
WHERE exists (SELECT * FROM album as al WHERE b.bid = alb.bid) 

모든 밴드 이름과 앨범 제목을 반환합니다. 내 생각 엔 하나 이상의 앨범이있는 밴드를 찾는 하위 쿼리 핸들을 사용하는 것입니다.하지만이 작업을 수행하는 방법에 대한 완전한 손실이 있습니다. 서브 쿼리는 일반적으로 반복적 인 일로 나를 던져 버렸기 때문에 개념적으로 어떻게 작동하는지에 대한 훌륭한 설명은 인정 될 것입니다. 더 하나의 제목보다 당신이 밴드를 찾고 있다면

SELECT b.name, a.title 
FROM band b 
    JOIN album a ON b.bid = a.bid 

대신 EXISTS를 사용

+0

성공 했습니까? – potashin

답변

0

, 나는 당신이 JOIN를 사용하고자하는 것 같아요 , 집합 쿼리를 사용해야합니다.

SELECT b.name, a.title 
FROM band b 
    JOIN album a ON b.band_id = a.band_id 
    JOIN (SELECT band_id 
      FROM album 
      GROUP BY band_id 
      HAVING COUNT(*) > 1) c ON b.band_id = c.band_id 
+0

이것은 또한 작동하는 것처럼 보입니다. 감사! – user95420

0

당신은 LEFT JOIN를 사용할 수 있습니다

SELECT b.name,x.title AS Title 
FROM band b LEFT JOIN (SELECT band_id 
           , GROUP_CONCAT(title SEPARATOR ', ') AS Title 
         FROM album 
         GROUP BY band_id 
         HAVING COUNT(*) > 1) x ON b.band_id = x.band_id 
WHERE x.band_id IS NOT NULL 

SQLFiddle

+0

이것이 효과가있는 것 같습니다. 감사! 내가 특별히 왼쪽 조인을 사용해야하는 이유는 무엇입니까? – user95420

+0

@ user95420 : '앨범'테이블에 '밴드'테이블에없는 레코드가있을 수 있으며, 그 반대의 경우도 있으므로 'INNER JOIN'에서는이 레코드를 고려하지 않습니다. 논리적으로는 꽤 괜찮지 만 데이터 무결성을 고려할 때 LEFT JOIN을 사용하는 것이 더 좋습니다. – potashin

0

이 쿼리를 시도 할 수 있습니다. 모든 제목을 얻으려면 과 JOIN을 사용해야합니다. 여기에서 데모 피들을보세요 http://sqlfiddle.com/#!2/3d689/3.

select b.name,tab.new_title 
from band b 
inner join 
(
    select `band_id`, 
    group_concat(`title`) as new_title 
from album 
group by `band_id` 
having count(*) > 1 
) tab on b.`band_id` = tab.`band_id` 
관련 문제