2013-02-12 46 views
1

可以說,我有3個表,汽車,cars_owner和所有者。 現在我想要擁有完整的汽車列表,那些擁有車主和沒有車主的車輛。組合表左連接到mysql中的內連接

當汽車擁有自己的汽車時,我必須擁有車主的數據。

Wrong query 1 (selects ownerless cars out): 
SELECT * FROM car 
LEFT JOIN cars_owner ON ... 
INNER JOIN owner ON ... 

Wrong query 2 (selects cars_owner relations without owners too): 
SELECT * FROM car 
LEFT JOIN cars_owner ON ... 
LEFT JOIN owner ON ... 

問題是:如何在MySQL中使用內部連接離開連接表?有任何想法嗎?

+0

基本上你要選擇所有各自的汽車車主,有它自己或不。對? – 2013-02-12 09:59:55

+0

我想擁有所有的汽車 - 如果擁有比所有者的數據 - 如果沒有所有者作爲NULL(因爲左連接自然會) – 2013-02-12 10:02:40

+0

因此,表cars_owner記錄沒有所有者。那麼每部車都有一個記錄?或者這些只是有一天車主擁有車主的記錄? – 2013-02-12 10:24:55

回答

0

該查詢返回的業主的汽車:

 
SELECT * FROM car 
LEFT JOIN cars_owner ON (car.CarID=cars_owner.CarID) 
inner join owner ON (owner.OwnID = cars_owner.OwnID) 

然而,這將返回車沒有車主:

 
SELECT * FROM car 
where (car.CarID!=(SELECT car.CarID FROM car 
        LEFT JOIN cars_owner ON (car.CarID=cars_owner.CarID) 
        inner join owner ON (owner.OwnID = cars_owner.OwnID))) 
+0

是的,我認爲,子選擇是唯一的解決方案。 – 2013-02-12 11:07:00