mysql - 查询重复记录mysql

标签 mysql sql

我有一个表,其中记录了两个变量 (a, b) 和一个 id,就像这样:

a,b,id    
x,y,1    
x,y,2    
x,z,3    
t,z,4    
t,y,5
t,y,6
t,y,7

对于每个id,我想使用mysql检查每对(a,b)变量之前是否出现过,并将其分配给一个变量。例如,先前输入的输出应该是:

a,b,id,repeated    
x,y,1,1 - this should be 1 not zero    
x,y,2,1    
x,z,3,0   
t,z,4,0    
t,y,5,0
t,y,6,1
t,y,7,1

我应该为一个相对较大的表(700000 行)执行此操作,因此我宁愿不使用慢速方法。有什么想法吗?

我们也不能假设只有以前的 ID 有重复数据,因此查询必须考虑到 ID 彼此不相等。

最佳答案

您可以使用 User-defined Session variables 执行此操作.

DB Fiddle DEMO

SELECT 
  IF(@a_var = dt.a AND 
     @b_var = dt.b, 
     1, 
     0) AS repeated, 
  @a_var := dt.a AS a, 
  @b_var := dt.b AS b, 
  dt.id 
FROM 
(
  SELECT 
    a, 
    b, 
    id
  FROM your_table 
  ORDER BY a,b,id
) AS dt 
CROSS JOIN (SELECT @a_var := '', 
                   @b_var := '') AS user_init_vars 

关于mysql - 查询重复记录mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52830573/

相关文章:

mysql - PostgreSQL如何用一条Insert语句插入多条记录

java - Mysql 事务和 RabbitMq

php - 如何使用 PHP 将当前日期时间放入 MySQL

mysql - 我怎样才能简化这个mysql语句?

mysql - Solr DataImport 编码

python - 是否可以使用已删除的架构运行 makemigrations ?

PHP MySQL 和队列、表锁定、读写器问题

mysql - 如果表 1 没有结果,则从语句 2 中选择

sql - 直观地概述Oracle SQL数据库的工具

mysql - 将 GROUP BY 与附加子句一起使用