如何避免使用多个SQL调用来获取数据?
我有一个MySQL数据库,其中有一个如何避免使用多个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,它描述了哪些香蕉属于哪些猴子。每只猴子只能有一根香蕉,没有猴子
猴子表
:
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]
匹配
和猴子
之间。这将确保列出所有猴子,即使它们在匹配项中没有香蕉
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的联合创始人)。您正在寻找一个加入
。