2012-11-25 44 views
1

我有一個MySQL數據庫,在我的monkeys表:如何避免使用多個SQL調用來獲取數據?

id  name 
1  Alice 
2  Bill 
3  Donkey Kong 
4  Edna 
5  Feefee 

我也有bananas一個表,並從他們挑選其中。

id  where_from 
1  USA 
2  Botswana 
3  Banana-land 
4  USA 

最後,我有一個表matches,描述哪些香蕉屬於哪些猴子。每隻猴子只能有一根香蕉,沒有猴子可以共用一根香蕉。有些猴子可能缺少香蕉。

id  monkey_id  banana_id 
1  3    4 
2  4    1 
3  5    2 

如何使用單個SQL語句檢索所有匹配項?對於每場比賽,我想要猴子的名字以及香蕉來自哪裏。

我曾嘗試以下3條SQL語句,其工作:

  1. SELECT * FROM matches
  2. SELECT * FROM monkeys WHERE id=[monkey_id from 1st SQL query]
  3. SELECT * FROM bananas WHERE id=[banana_id from 1st SQL query]

我覺得3條SQL語句很麻煩,但。關於如何使用單個SQL語句的任何想法?我只是在學習SQL,並且在基礎知識上徘徊。謝謝!

+2

您正在尋找'JOIN'。 –

回答

3

由於有些猴子可能缺乏香蕉,暗示matchesmonkeys之間a LEFT JOIN。這將確保所有的猴子都被列出,即使他們在matches沒有香蕉。

SELECT 
    monkeys.name, 
    bananas.where_from 
FROM 
    monkeys 
    /* List all monkeys, even if they have no match */ 
    LEFT JOIN matches ON monkeys.id = matches.monkey_id 
    /* And another LEFT JOIN to link matches to bananas */ 
    LEFT JOIN bananas ON bananas.id = matches.banana_id 

Here is an example on SQLfiddle.com

我非常強烈建議你閱讀過傑夫·阿特伍德(堆棧溢出的聯合創始人)excellent article explaining SQL joins

相關問題