22、union面试题讲解
2018-12-16 本文已影响0人
小碧小琳
一、题目:
现有如下两张表:
![](https://img.haomeiwen.com/i5945886/fc5b0ea0fb9db393.png)
希望根据这两张表得到如下结果:
![](https://img.haomeiwen.com/i5945886/99c0c0fc3cbafa0d.png)
根据结果,我们会发现题目要求:
两张表中,具有相同id的字段num相加,没有就留下来不变。
二、题解
2.1、错误示例
我们利用union连接两个表,得到一个临时表:
![](https://img.haomeiwen.com/i5945886/111d8aca1a1b773b.png)
然后对这个临时表再进行查询。
考虑到最终的id名称都是不重复的,因此想到用group by。
对于num,我们看成变量,相同id的num值相加。用sum函数,
因此写出如下sql语句,得到如下答案:
![](https://img.haomeiwen.com/i5945886/3cb1852d24a0e824.png)
发现c最终等于15,是错误的。其实我们在上一个结果集中就已经能够看到,只有一个c=15的结果。这是因为union中相同的列,相同的值默认去重了。
按照题目要求是不能去重的。
2.2、正确答案
在上面的union中加一个all,保证不会去重。