mysql差集语句

阅读: 评论:0

mysql差集语句

mysql差集语句

mysql两表汇总后再得到两表的交集和差集,请问怎么实现?

CREATETABLEA(

`C1`VARCHAR(10),

`C2`VARCHAR(10),

`C3`VARCHAR(10),

`C4`VARCHAR(10),

`C5`INT

INSERTINTOA

SELECT'华北','辽宁','沈阳','20020202',2UNIONALL

SELECT'华东','山东','青岛','18020133',3UNIONALL

SELECT'华北','北京','北京','7193',7UNIONALL

SELECT'华北','北京','北京','8358',5UNIONALL

SELECT'华北','北京','北京','9773',8UNIONALL

SELECT'华东','山东','青岛','18020133',5;

CREATETABLEB(

`C1`VARCHAR(10),

`C2`VARCHAR(10),

`C3`VARCHAR(10),

`C4`VARCHAR(10),

`C5`INT

INSERTINTOB

SELECT'华北','辽宁','沈阳','20020202',5UNIONALL

SELECT'华东','山东','青岛','18020133',6UNIONALL

SELECT'华北','北京','北京','7193',2UNIONALL

SELECT'华东','甘肃','兰州','7364',3UNIONALL

SELECT'华东','湖北','武汉','7512',7UNIONALL

SELECT'华东','湖北','武汉','7512',2UNIONALL

SELECT'华东','江苏','常州','7582',5UNIONALL

SELECT'华东','江苏','淮安','7670',7;

SELECT

IFNULL(A.`C1`,B.`C1`)AS`区域`,

IFNULL(A.`C2`,B.`C2`)AS`省份`,

IFNULL(A.`C3`,B.`C3`)AS`城市`,

IFNULL(A.`C4`,B.`C4`)AS`编码`,

SUM(A.`C5`)AS`表A销量`,

SUM(B.`C5`)AS`表B销量`

ALEFTJOINB

A.`C1`=B.`C1`AND

A.`C2`=B.`C2`AND

A.`C3`=B.`C3`AND

A.`C4`=B.`C4`

GROUPBY

IFNULL(A.`C1`,B.`C1`),

IFNULL(A.`C2`,B.`C2`),

IFNULL(A.`C3`,B.`C3`),

IFNULL(A.`C4`,B.`C4`)

UNION

SELECT

IFNULL(A.`C1`,B.`C1`)AS`区域`,

IFNULL(A.`C2`,B.`C2`)AS`省份`,

IFNULL(A.`C3`,B.`C3`)AS`城市`,

IFNULL(A.`C4`,B.`C4`)AS`编码`,

SUM(A.`C5`)AS`表A销量`,

SUM(B.`C5`)AS`表B销量`

ARIGHTJOINB

A.`C1`=B.`C1`AND

A.`C2`=B.`C2`AND

A.`C3`=B.`C3`AND

A.`C4`=B.`C4`

GROUPBY

IFNULL(A.`C1`,B.`C1`),

IFNULL(A.`C2`,B.`C2`),

IFNULL(A.`C3`,B.`C3`),

IFNULL(A.`C4`,B.`C4`);

+------+------+------+----------+---------+---------+

|区域|省份|城市|编码|表A销量|表B销量|

+------+------+------+----------+---------+---------+

|华北|辽宁|沈阳|20020202|2|5|

|华北|北京|北京|7193|7|2|

|华北|北京|北京|8358|5|NULL|

|华北|北京|北京|9773|8|NULL|

|华东|山东|青岛|18020133|8|12|

|华东|甘肃|兰州|7364|NULL|3|

|华东|湖北|武汉|7512|NULL|9|

|华东|江苏|常州|7582|NULL|5|

|华东|江苏|淮安|7670|NULL|7|

+------+------+------+----------+---------+---------+

9rowsinset(0.00sec)

更多追问追答

为什么华东|山东|青岛|18020133|8|12|这条中的表B不是而是12

执行的结果存在问题,首先表A有二条编码18020133相同的,表B只有一条编码18020133的记录,那么执行的结果就成了表A二条之和,表B一条的2倍了,反之是一样的。所以上面的语句得到的结果是错误的。

恩,我原先的逻辑,是先关联,后合计,现在看来有些问题.需要修改一下:

修改为先合计,后关联.

SELECT

IFNULL(A.`C1`,B.`C1`)AS`区域`,

IFNULL(A.`C2`,B.`C2`)AS`省份`,

IFNULL(A.`C3`,B.`C3`)AS`城市`,

IFNULL(A.`C4`,B.`C4`)AS`编码`,

IFNULL(A.`C5`,0)AS`表A销量`,

IFNULL(B.`C5`,0)AS`表B销量`

(SELECTC1,C2,C3,C4,SUM(C5)ASC5FROMAGROUPBYC1,C2,C3,C4)A

LEFTJOIN(SELECTC1,C2,C3,C4,SUM(C5)ASC5FROMBGROUPBYC1,C2,C3,C4)B

A.`C1`=B.`C1`AND

A.`C2`=B.`C2`AND

A.`C3`=B.`C3`AND

A.`C4`=B.`C4`

UNION

SELECT

IFNULL(A.`C1`,B.`C1`)AS`区域`,

IFNULL(A.`C2`,B.`C2`)AS`省份`,

IFNULL(A.`C3`,B.`C3`)AS`城市`,

IFNULL(A.`C4`,B.`C4`)AS`编码`,

IFNULL(A.`C5`,0)AS`表A销量`,

IFNULL(B.`C5`,0)AS`表B销量`

(SELECTC1,C2,C3,C4,SUM(C5)ASC5FROMAGROUPBYC1,C2,C3,C4)A

RIGHTJOIN(SELECTC1,C2,C3,C4,SUM(C5)ASC5FROMBGROUPBYC1,C2,C3,C4)B

A.`C1`=B.`C1`AND

A.`C2`=B.`C2`AND

A.`C3`=B.`C3`AND

A.`C4`=B.`C4`

+------+------+------+----------+---------+---------+

|区域|省份|城市|编码|表A销量|表B销量|

+------+------+------+----------+---------+---------+

|华北|辽宁|沈阳|20020202|2|5|

|华北|北京|北京|7193|7|2|

|华北|北京|北京|8358|5|0|

|华北|北京|北京|9773|8|0|

|华东|山东|青岛|18020133|8|6|

|华东|甘肃|兰州|7364|0|3|

|华东|湖北|武汉|7512|0|9|

|华东|江苏|常州|7582|0|5|

|华东|江苏|淮安|7670|0|7|

+------+------+------+----------+---------+---------+

9rowsinset(0.00sec)

还有比如:

蓝JV255

S3250

钢T305

金T305

金T205

金JV255

金JV205

红Z909

JA205

HB120

请问如何让字段a=字段b,因为字段a中存在汉字。我写成select*froma,bwherea.a=b.borsubstring(a.a,2)=b.b,但如果字段a中有多个汉字就行不通了

select*froma,bwherea.aLIKECONCAT('%',b.b)

看看行不行?

这个我没测试.

本回答由提问者推荐

mysql 查询两个时间段是否有交集的情况

select * from (select * from A union select * from B) as c order by time desc;

你们都差啥福?支付宝集福?支付宝集福,差敬业福了,你们都差啥福?

我也差敬业福,好多人都差敬业福 。

autocad差集怎么用啊?

1、首先打开计算机,在计算机内打开CAD,然后在CAD界面内打开【选择样板】载入acad3D.dwt文件,并设置好视角。

2、然后通过菜单栏选择【常用】》【建模】》【圆柱体】选项。

3、绘制两个相互叠加的圆柱。

4、接着依次选择【常用】》【实体编辑】》【差集】选项。

5、通过鼠标左键在绘图区选择要从中减去的实体对象,底部大圆盘中减去圆柱。

选择好后再选择要减去的对象(长圆柱),再按下回车即可。

SQL 语句 两张表中的差集

我这么理解的你看是不是这个意思。

两表数据也都是一样的,主要看剩下的那200条

select * from tab1 where id not in (select id from tab2)select a.id,b.id,a.name,b.name

from 表1 a,表2 b inner join on a.id=b.id

mysql两表汇总后再得到两表的交集和差集,请问怎么实现?

CREATE TABLE A (

`C1` VARCHAR(10),

`C2` VARCHAR(10),

`C3` VARCHAR(10),

`C4` VARCHAR(10),

`C5` INT

INSERT INTO A

SELECT '华北', '辽宁', '沈阳', '20020202', 2 UNION ALL

SELECT '华东', '山东', '青岛', '18020133', 3 UNION ALL

SELECT '华北', '北京', '北京', '7193', 7UNION ALL

SELECT '华北', '北京', '北京', '8358', 5UNION ALL

SELECT '华北', '北京', '北京', '9773', 8UNION ALL

SELECT '华东', '山东', '青岛', '18020133', 5 ;

CREATE TABLE B (

`C1` VARCHAR(10),

`C2` VARCHAR(10),

`C3` VARCHAR(10),

`C4` VARCHAR(10),

`C5` INT

INSERT INTO B

SELECT '华北', '辽宁', '沈阳', '20020202', 5 UNION ALL

SELECT '华东', '山东', '青岛', '18020133', 6 UNION ALL

SELECT '华北', '北京', '北京', '7193', 2UNION ALL

SELECT '华东', '甘肃', '兰州', '7364', 3UNION ALL

SELECT '华东', '湖北', '武汉', '7512', 7UNION ALL

SELECT '华东', '湖北', '武汉', '7512', 2UNION ALL

SELECT '华东', '江苏', '常州', '7582', 5UNION ALL

SELECT '华东', '江苏', '淮安', '7670', 7;

SELECT

IFNULL(A.`C1`, B.`C1`) AS `区域`,

IFNULL(A.`C2`, B.`C2`) AS `省份`,

IFNULL(A.`C3`, B.`C3`) AS `城市`,

IFNULL(A.`C4`, B.`C4`) AS `编码`,

SUM(A.`C5`) AS `表A销量`,

SUM(B.`C5`) AS `表B销量`

A LEFT JOIN B

ON (

A.`C1` = B.`C1` AND

A.`C2` = B.`C2` AND

A.`C3` = B.`C3` AND

A.`C4` = B.`C4`

)

GROUP BY

IFNULL(A.`C1`, B.`C1`),

IFNULL(A.`C2`, B.`C2`),

IFNULL(A.`C3`, B.`C3`),

IFNULL(A.`C4`, B.`C4`)

UNION

SELECT

IFNULL(A.`C1`, B.`C1`) AS `区域`,

IFNULL(A.`C2`, B.`C2`) AS `省份`,

IFNULL(A.`C3`, B.`C3`) AS `城市`,

IFNULL(A.`C4`, B.`C4`) AS `编码`,

SUM(A.`C5`) AS `表A销量`,

SUM(B.`C5`) AS `表B销量`

A RIGHT JOIN B

ON (

A.`C1` = B.`C1` AND

A.`C2` = B.`C2` AND

A.`C3` = B.`C3` AND

A.`C4` = B.`C4`

)

GROUP BY

IFNULL(A.`C1`, B.`C1`),

IFNULL(A.`C2`, B.`C2`),

IFNULL(A.`C3`, B.`C3`),

IFNULL(A.`C4`, B.`C4`);

+------+------+------+----------+---------+---------+

| 区域 | 省份 | 城市 | 编码| 表A销量 | 表B销量 |

+------+------+------+----------+---------+---------+

| 华北 | 辽宁 | 沈阳 | 20020202 |2 |5 |

| 华北 | 北京 | 北京 | 7193|7 |2 |

| 华北 | 北京 | 北京 | 8358|5 |NULL |

| 华北 | 北京 | 北京 | 9773|8 |NULL |

| 华东 | 山东 | 青岛 | 18020133 |8 |12 |

| 华东 | 甘肃 | 兰州 | 7364|NULL |3 |

| 华东 | 湖北 | 武汉 | 7512|NULL |9 |

| 华东 | 江苏 | 常州 | 7582|NULL |5 |

| 华东 | 江苏 | 淮安 | 7670|NULL |7 |

+------+------+------+----------+---------+---------+

9 rows in set (0.00 sec)select a.*, b.销量 from a left join b on a.编码 = b.编码

union all

select b.区域, b.省份, b.城市, b.编码, a.销量, b.销量

from a right join b on a.编码 = b.编码

本文发布于:2024-02-01 08:31:17,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170674747735265.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语句   mysql
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23