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从具有条件的多个表中选择的主要内容,如果未能解决你的问题,请参考以下文章

从同一个表mysql存储过程中选择具有不同条件的多个计数

MySQL中2个表中的多个WHERE条件

用于从具有多个条件的多个表中的多个列中获取数据的存储过程

从具有不同条件的表中选择总和和平均值

在 Access 2013 中具有多个条件的 DoCmd.SearchForRecord

根据条件从多个表中获取数据