所以,我在MySQL查询方面遇到了一些问题(参见other question),并决定采用不同的方法。
我有一个包含一些重复行的数据库表,我实际上可能需要这些行供将来参考,所以我不想删除。我正在寻找的是一种显示数据的方法,没有那些重复,但没有删除它们。我不能使用简单的选择查询(如另一个问题中所述)。
所以我需要做的是编写执行以下操作的代码: 1.浏览我的数据库表。 2.在“ip”列中找到重复项。 3.将每个副本的第一个实例标记为“0”(在名为“duplicate”的列中),其余的标记为“1”。
这样我以后可以只选择行WHERE duplicate = 0。
注意:如果您的解决方案与SELECT查询相关,请首先阅读此other question - 这是我不仅仅使用GROUP BY / DISTINCT的原因。
提前致谢。
答案 0 :(得分:1)
MySQL没有任何排名/分析/窗口功能,但您可以使用变量:
SELECT t.ip,
CASE
WHEN @ip != t.ip THEN @rank := 0
ELSE @rank := @rank + 1
END AS duplicate,
@ip = t.ip
FROM TABLE t
JOIN (SELECT @rank := 0, @ip = NULL) r
ORDER BY t.ip
ip
列中第一次出现duplicate
值的值为零;所有后续记录的值都会增加1。如果您不想增加数字,请使用:
SELECT t.ip,
CASE
WHEN @ip != t.ip THEN 0
ELSE 1
END AS duplicate,
@ip = t.ip
FROM TABLE t
JOIN (SELECT @ip = NULL) r
ORDER BY t.ip
通过在子查询中使用它,您可以从中获取唯一IP行的列表:
SELECT x.ip
FROM (paste either query in here) x
WHERE x.duplicate = 0