MySQL从具有条件的多个表中选择
Posted
技术标签:
【中文标题】MySQL从具有条件的多个表中选择【英文标题】:MySQL select from multiple table with conditions 【发布时间】:2012-04-27 14:39:40 【问题描述】:我有 4 张桌子:
ARTICOLE
BAR
BUCATARIE
MAGAZIE
mysql> select * from ARTICOLE;
| OID | ART |
| 1 | TEST |
| 2 | TESTQ |
| 3 | MYART |
| 4 | MYARTBUC |
4 行(0.00 秒)
mysql> select * from BAR;
| OID | ART | CANT |
| 1 | TEST | 3.00000 |
| 2 | TESTQ | 1.00000 |
| 3 | MYART | 20.00000 |
3 行(0.00 秒)
mysql> select * from BUCATARIE;
| OID | ART | CANT |
| 1 | TEST | 5.00000 |
| 2 | MYARTBUC | 10.00000 |
集合中的 2 行(0.00 秒)
mysql> select * from MAGAZIE;
空集(0.00 秒)
下面的查询
mysql> select a.ART,sum(bar.CANT),sum(buc.CANT),sum(mag.CANT) from ARTICOLE a,BUCATARIE buc,BAR bar,MAGAZIE mag where a.ART=bar.ART and a.ART=bar.ART and a.ART=mag.ART group by a.ART;
返回:
空集(0.00 秒)
必须如何查询才能返回:
| ART | sum(bar.CANT) | sum(buc.CANT) | sum(mag.CANT) |
TEST | 3.00000 | 5.00000 | NULL |
TESTQ | 1.00000 | NULL | NULL |
MYART | 20.00000 | NULL | NULL|
MYARTBUC | NULL | 10.00000 | NULL |
??????
任何帮助表示赞赏。
【问题讨论】:
测试架构:sqlfiddle.com/#!2/6efb2 【参考方案1】:您需要使用LEFT JOIN
来包含来自其他表的结果,而不过滤掉不匹配的记录:
select a.ART,sum(bar.CANT),sum(buc.CANT),sum(mag.CANT)
from ARTICOLE a
left join BUCATARIE buc on buc.ART = a.ART
left join BAR bar on bar.ART = a.ART
left join MAGAZIE mag on mag.ART = a.ART
group by a.ART;
示例结果:
ART SUM(BAR.CANT) SUM(BUC.CANT) SUM(MAG.CANT)
MYART 20
MYARTBUC 10
TEST 3 5
TESTQ 1
演示:http://www.sqlfiddle.com/#!2/6efb2/2
【讨论】:
以上是关于MySQL从具有条件的多个表中选择的主要内容,如果未能解决你的问题,请参考以下文章