2011-06-14 64 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 

我想列出所有的动物和汽车,至少有一个法拉利车主。由于比尔拥有法拉利,我们将列出所有比尔的汽车和动物。

如果我使用下面的SQL:

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  Dog  Ferrari 

什么我希望结果是

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

我能知道什么是正确的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; 
相关问题