MySQL实现差集(Minus)和交集(Intersect)测试报告

可以用SQL实现同样的功能,就是麻烦了点。

 drop table t1;

 drop table t2;

create table t1(id int primary key,nickname varchar(20),playNum varchar(20));

create table t2(id int primary key,nickname varchar(20),playNum varchar(20));

insert into t1 values(1,1,10);

insert into t1 values(2,2,20);

insert into t1 values(3,3,30);

insert into t2 values(1,1,10);

insert into t2 values(2,2,200);

insert into t2 values(3,33,300);

commit;

MySQL实现交集

SELECT id, nickname, playNum, COUNT(*)

 FROM (SELECT id, nickname, playNum

FROM t1

UNION ALL

SELECT id, nickname, playNum

FROM t2

) a

GROUP BY id, nickname, playNum

HAVING COUNT(*) > 1

MySQL实现差集

SELECT t1.id, t1.nickname, t1.playNum

 FROM t1 LEFT JOIN t2 ON t1.id = t2.id

WHERE t1.nickname != t2.nickname

OR t1.playNum != t2.playNum;

(0)

相关推荐

  • MySQL中replace into语句的用法详解

    在向表中插入数据的时候,经常遇到这样的情况: 1.首先判断数据是否存在: 2.如果不存在,则插入: 3.如果存在,则更新.   在 SQL Server 中可以这样写: 复制代码 代码如下: if not exists (select 1 from table where id = 1) insert into table(id, update_time) values(1, getdate()) else update table set update_time = getdate() whe

  • mysql int(3)与int(11)的区别详解

    mysql int(3)与int(11)的区别 总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加zerofill,则它们没有什么区别.M不是用来限制int个数的.int(M)的最大值和最小值与undesigned有关,最下面那副图有说明. mysql> create table t (t int(3) zerofil

  • 简单谈谈MySQL中的int(m)

    我们在设计表的时候,如果碰到需要设置int(整型)的时候,通常会按照惯例(大家都这样写)设置成int(11).那么这里为什么是11呢?代表的又是什么呢? 以前我一直以为这里是在限制int显示的宽度,后来仔细研究和通过上网查询发现,事实并不是那样的. 确切的来说,这里的"宽度"只是一个"预期值",它所代表的仅仅是你在设计数据表结构时,想让该列日后显示的值宽度为多少,但是具体存入值的宽度多少不会受任何影响. 当然,它的作用不仅如此,在存入数据的时候,还是有一定区别的,这

  • Mysql错误1366 - Incorrect integer value解决方法

    由于这个数据库服务器存放的数据库比较多且都是小数据库,所以最初的时候是运行在windows服务器上的.前一段时间由于机房服务器要做调整,于是我便在一个夜深人静的夜晚对数据库进行的迁移及前台应用程序进行了调整,调整结束后测试应用均可以正常访问后我便离去了. 周一刚上班就收到反馈:网站后台发布文章报如下错误: 复制代码 代码如下: insert into doc_main (title,typeid,uptime,intro,ifhot,imgurl1,doctype,fileurl1,shunxu

  • mysql中TINYINT的取值范围

    在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127.无符号的范围是0到255(见官方<MySQL 5.1参考手册>http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types). Tinyint占用1字节的存储空间,即8位(bit).那么Tinyint的取值范围怎么来的呢?我们先看无符号的情况.无符号的最小值即全部8位(bit)都为0,换算成十进制就是0,所以无符号的Tinyint

  • 浅析MySQL replace into 的用法

    在 SQL Server 中可以这样处理: 复制代码 代码如下: if not exists (select 1 from t where id = 1)   insert into t(id, update_time) values(1, getdate())else   update t set update_time = getdate() where id = 1 那么 MySQL 中如何实现这样的逻辑呢?别着急!MySQL 中有更简单的方法: replace into 复制代码 代码如

  • Mysql错误Cannot find or open table x/x from the internal问题解决方法

    网站事件日志出现了这个错误: 事件类型: 错误事件来源: MySQL事件种类: 无事件 ID: 100日期:  2012-8-14事件:  8:07:59用户:  N/A计算机: abcserver描述: 复制代码 代码如下: Cannot find or open table phpwind/pw_zhuanti from the internal data dictionary of InnoDB though the .frm file for the table exists. Mayb

  • MySql中使用INSERT INTO语句更新多条数据的例子

    我们知道当插入多条数据的时候insert支持多条语句: 复制代码 代码如下: INSERT INTO t_member (id, name, email) VALUES     (1, 'nick', 'nick@126.com'),     (4, 'angel','angel@163.com'),     (7, 'brank','ba198@126.com'); 但是对于更新记录,由于update语法不支持一次更新多条记录,只能一条一条执行: 复制代码 代码如下: UPDATE t_mem

  • MySQL实现差集(Minus)和交集(Intersect)测试报告

    可以用SQL实现同样的功能,就是麻烦了点. drop table t1; drop table t2; create table t1(id int primary key,nickname varchar(20),playNum varchar(20)); create table t2(id int primary key,nickname varchar(20),playNum varchar(20)); insert into t1 values(1,1,10); insert into

  • MySQL 查询 并集、交集、差集方式

    目录 MySQL查询交集.并集.差集 背景和使用的数据样本 基本语法 注意事项 总结 MySQL查询交集.并集.差集 背景和使用的数据样本 该章节学些主要涉及到Datawhale SQL 组队学习任务: 本次使用的数据,由Datawhale 开源提供,具体代码见文章尾部:各位看官可以直接复制到MySQL Workbench 上运行生成数据库和表格. MySQL WorkBench 如何对数据进行我们常见的集合运算呢? Union. INTERSECT(遗憾的是MySQL 8.0 不支持该运算用w

  • 深入SQL SERVER合并相关操作Union,Except,Intersect的详解

    对于结果集有几个处理,值得讲解一下1. 并集(union,Union all)这个很简单,是把两个结果集水平合并起来.例如SELECT * FROM AUNIONSELECT * FROM B[注意]union会删除重复值,也就是说A和B中重复的行,最终只会出现一次,而union all则会保留重复行. 2. 差异(Except)就是两个集中不重复的部分.例如SELECT * FROM AEXCEPTSELECT * FROM B这个的意思是,凡是不出现在B表中的A表的行. 3. 交集(inte

  • java 较大数据量取差集,list.removeAll性能优化详解

    今天在优化项目中的考勤同步功能时遇到将考勤机中的数据同步到数据库, 两边都是几万条数据的样子,老代码的做法差不多半个小时,优化后我本机差不多40秒,服务器速度会更加理想. 两个数据集取差集首先想到的方法便是List.removeAll方法,但是实验发现jdk自带的List.removeAll效率很低 List.removeAll效率低原因: List.removeAll效率低和list集合本身的特点有关 : List底层数据结构是数组,查询快,增删慢 1.List.contains()效率没有h

  • Redis实现数据的交集、并集、补集的示例

    目录 场景说明 环境说明 交并补计算 差集的计算 交集的计算 并集的计算 Redis命令说明 场景说明 今天我们来模拟一个这样的场景,我们在本地有多个文本文件,每个文件里面存了很多的32位的字符串作为用户的唯一标识,每个用户存做一行,假如我们每天都有非常大规模的用户,这样我们可能在工作中就存在需要对这些用户进行交集.并集或补集等处理,最简单的方式是通过Java中的集合来进行运算即可,比如通过HashSet来进行相应的一些运算,但是这样的运算存在一个局限性,那就是我们一般在JVM运行过程中初始的内

  • ORACLE 常用的SQL语法和数据对象

    1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSERT INTO 表名(字段名1, 字段名2, --) SELECT (字段名1, 字段名2, --) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: 'GOOD DAY' 如果字段值里包含单引号' 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度

  • 日常收集整理的oracle常用命令大全(收藏)

    一.Oracle的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup SVRMGR>quit b.关闭ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>shutdown SVRMGR>quit 启动

  • 超详细的SQL语句语法汇总

    一.数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句)INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSERT INTO 表名(字段名1, 字段名2, --)  SELECT 字段名1, 字段名2, -- FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: 'GOOD DAY'如果字段值里包含单引号' 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过定义的长

  • oracle基本查询操作子查询用法实例分析

    本文实例讲述了oracle基本查询操作子查询用法.分享给大家供大家参考,具体如下: 一.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); 子查询在主查询之前一次执行完成. 子查询的结果被主查询使用. select ename from emp where sal > (select sal from emp where ename='SCOTT'); (*注意:子查询要

  • Go中如何使用set的方法示例

    今天来聊一下 Go 如何使用 set,本文将会涉及 set 和 bitset 两种数据结构. Go 的数据结构 Go 内置的数据结构并不多.工作中,我们最常用的两种数据结构分别是 slice 和 map,即切片和映射.其实,Go 中也有数组,切片的底层就是数组,只不过因为切片的存在,我们平时很少使用它. 除了 Go 内置的数据结构,还有一些数据结构是由 Go 的官方 container 包提供,如 heap 堆.list 双向链表和ring 回环链表.但今天我们不讲它们,这些数据结构,对于熟手来

随机推荐