mysql数据库如何做这样的差集查询?select URL from TABLEA
whereurl not in (select URL from TABLEB where APP_NAME=TABLEA.APP_NAME)
mysql里面求两个表的差集只是查询,不做删除吧:
SELECT * FROM 表1 WHERE name NOT IN (
SELECT name FROM 表2
)
mysql两表汇总后再得到两表的交集和差集,请问怎么实现?CREATE TABLE A (
`C1`VARCHAR(10),
`C2`VARCHAR(10),
`C3`VARCHAR(10),
`C4`VARCHAR(10),
`C5` INT
);
INSERT INTO A
SELECT '华北','辽宁','沈阳', '20020202', 2UNION ALL
SELECT '华东','山东','青岛', '18020133', 3UNION 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销量`
FROM
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销量`
FROM
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)
MYSQL如何得到补集.当然是要最高效率的方案让group by 使用索引而不创建临时表,
使用索引的前提条件是:所有GROUP BY列引用同一索引的属性 , 并且索引按顺序保存其关键字(B-树索引,不是HASH索引)
至于DISTINCT 和GROUP BY哪个效率更高?
理论上 DISTINCT操作只需要找出所有不同的值就可以了 。而GROUP BY操作还要为其他聚集函数进行准备工作 。从这一点上将,GROUP BY操作做的工作应该比DISTINCT所做的工作要多一些 。
但是实际上,DISTINCT操作 , 它会读取了所有记录;GROUP BY需要读取的记录数量与分组的组数量一样多,比实际存在的记录数目要少很多 。
【mysql差集怎么操作 mysql差集语句】mysql差集怎么操作的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql差集语句、mysql差集怎么操作的信息别忘了在本站进行查找喔 。
推荐阅读
- 公众号怎么导出封面文字,公众号文章封面怎么提取
- 抖音新人开播如何引流,抖音新人怎么直播带货
- 原创速写角色扮演游戏,速写游戏人物
- 包含php按时间数据统计优化的词条
- 怎么给硬盘散热,硬盘散热器怎么装
- psv格斗游戏,psv格斗游戏名
- 天津三维实景gis公司,天津的三维地图
- php遍历数据key php遍历数据库字段
- 为什么国产手机没用鸿蒙,为什么国内厂商不用鸿蒙