2011-06-14 6 views
3

다음 테이블이 있습니다.다음 결과를 얻으려면 올바른 SQL 문은 무엇입니까

Owner_id Owner 
----------------- 
1   Bill 
2   Steve 


Animal  Owner_fk_id 
----------------------- 
Cat   1 
Dog   1 
Lion  2 

Car   Owner_fk_id 
----------------------- 
Ferrari  1 
BMW   1 
Lotus  2 

페라리 1 개 이상을 소유 한 소유자를 위해 모든 동물과 자동차를 나열하고 싶습니다. Bill은 Ferrari를 보유하고 있으므로 Bill의 모든 자동차와 동물을 나열합니다.

SELECT * 
    FROM Owner 
    LEFT JOIN Animal ON (Animal.Owner_fk_id = Owner.Owner_id) 
    LEFT JOIN Car ON (Car.Owner_fk_id = Owner.Owner_id) 
    WHERE Car.Car = 'Ferrari' 

내달라고 결과가

Owner  Animal Car 
--------------------------- 
Bill  Cat  Ferrari 
Bill  Cat  BMW 
Bill  Dog  Ferrari 
Bill  Dog  BMW 

내가 올바른 SQL이 무엇인지 알 수있을 것입니다 무엇

Owner  Animal Car 
--------------------------- 
Bill  Cat  Ferrari 
Bill  Dog  Ferrari 

을 받고됩니다

것은 나는 다음과 같은 SQL을 사용하고있는 경우 나는 사용해야한다고 성명서?

답변

3

원하는 조건 (예 : Car='Ferrari)의 내부 결합을 수행 한 다음 이전과 같이 다른 테이블을 왼쪽으로 결합합니다.

SELECT o.Owner, a.Animal, c2.Car 
FROM Owner as o 
INNER JOIN Car as c1 on c1.Owner_fk_id = o.Owner_id and c1.Car='Ferrari' 
LEFT JOIN Animal as a ON a.Owner_fk_id = o.Owner_id 
LEFT JOIN Car as c2 ON c2.Owner_fk_id = o.Owner_id; 
0

Owner 여러 페라리 소유하고 그것은 단지 그 계산에 중요한 경우/한 번 그녀, 당신은 같은 것을 할 수있는 :

SELECT subq.Owner, a.Animal, c2.Car FROM 
    (SELECT o.* FROM Owner as o1 WHERE EXISTS 
     (SELECT 1 FROM Car as c1 
     WHERE c1.Owner_fk_id = o1.Owner_id 
     AND c1.Car='Ferrari') 
    ) as subq 
LEFT JOIN Animal as a ON a.Owner_fk_id = subq.Owner_id 
LEFT JOIN Car as c2 ON c2.Owner_fk_id = subq.Owner_id; 
관련 문제