我有一个表,其中记录了两个变量 (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/