如何避免使用多个SQL调用来获取数据?

如何避免使用多个SQL调用来获取数据?,sql,join,left-join,Sql,Join,Left Join,我有一个MySQL数据库,其中有一个猴子表: id name 1 Alice 2 Bill 3 Donkey Kong 4 Edna 5 Feefee 我还有一张香蕉表,上面有香蕉和它们的产地 id where_from 1 USA 2 Botswana 3 Banana-land 4 USA 最后,我有一个表matches,它描述了哪些香蕉属于哪些猴子。每只猴子只能有一根香蕉,没有猴子

我有一个MySQL数据库,其中有一个
猴子表

id     name
1      Alice
2      Bill
3      Donkey Kong
4      Edna
5      Feefee
我还有一张香蕉表,上面有香蕉和它们的产地

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语句,它们都能正常工作:

  • 从匹配项中选择*
  • SELECT*FROM monkeys,其中id=[monkey\u id FROM first SQL query]
  • SELECT*FROM banana,其中id=[banana\u id FROM first SQL query]
  • 但我觉得3条SQL语句很麻烦。关于如何只使用一条SQL语句,有什么想法吗?我只是在学习SQL,并在玩弄基础知识。谢谢

    由于一些猴子可能缺少香蕉,这意味着在
    匹配
    猴子
    之间。这将确保列出所有猴子,即使它们在
    匹配项中没有香蕉

    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
    


    我强烈推荐阅读Jeff Atwood(Stack Overflow的联合创始人)。

    您正在寻找一个
    加入