2016-07-05 34 views
1

假設我有3個表:SQL:如何連接表的權利?

CREATE TABLE animals 
(
    animal_id INT PRIMARY KEY, 
    animal_name VARCHAR(100) 
); 

CREATE TABLE zoos 
(
    zoo_id INT PRIMARY KEY, 
    zoo_name VARCHAR(100) 
); 

CREATE TABLE zoo_has_animals 
(
    zoo_id INT, 
    animal_id INT 
); 

我需要得到所有空動物園。我嘗試使用下一個腳本加入它們:

SELECT zoos.zoo_name 
FROM zoos 
LEFT JOIN zoo_has_animals ON zoos.zoo_id = zoo_has_animals.zoo_id; 

但它返回所有不是空的動物園而不是所需的空動物園。我究竟做錯了什麼?

+0

哪個RDBMS是這個呢?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

+0

你想要一個OUTER LEFT JOIN。我總是參考[此圖](http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg),希望它有幫助。 – Aaron

+0

@marc_s這是'MySQL'。 – Alex

回答

1

無需爲JOIN都:

SELECT z.zoo_name 
FROM zoos as z 
WHERE NOT EXISTS(SELECT 1 FROM zoo_has_animals 
       WHERE zoo_id = z.zoo_id); 

隨着JOIN

SELECT z.zoo_name 
FROM zoos as z 
LEFT JOIN zoo_has_animals as h 
    ON z.zoo_id = h.zoo_id 
WHERE h.zoo_id IS NULL; 
+0

我明白了,但是可以通過JOIN做到嗎? – Alex

+0

@Alex當然,並且回答了評論。無論如何,更新我的答案與它的一個版本 – Lamak