Mysql 在SQL表中查找重复值,并在列中添加唯一值
我有一个包含位置的表,其中有重复的位置,因为有同名的位置属于不同的县Mysql 在SQL表中查找重复值,并在列中添加唯一值,mysql,sql,count,subquery,window-functions,Mysql,Sql,Count,Subquery,Window Functions,我有一个包含位置的表,其中有重复的位置,因为有同名的位置属于不同的县 +------+-----------+----------- | ID | location | parent_id | +------+-----------+------------+ | 1 | Country | 0 | | 2 | County 1 | 1 | | 3 | County 2 | 1
+------+-----------+-----------
| ID | location | parent_id |
+------+-----------+------------+
| 1 | Country | 0 |
| 2 | County 1 | 1 |
| 3 | County 2 | 1 |
| 4 | A | 2 |
| 5 | B | 2 |
| 6 | C | 2 |
| 7 | A | 3 |
| 8 | E | 3 |
| 9 | B | 3 |
+---- -+-----------+------------+
我想为每个重复的ID值创建并在列中插入副本。结果应该是这样的:(最好将重复列中的ID添加到所有重复项中,ID最小的除外)
我使用此选项列出行:
SELECT a.* FROM mytable a
JOIN (SELECT location, COUNT(*)
FROM mytable
GROUP BY location
HAVING count(*) > 1 ) b
ON a.location= b.location
ORDER BY a.location
看起来窗口计数可以实现您想要的功能:
select t.*,
case when count(*) over(partition by location) > 1 then id end duplicate
from mytable t
这需要MySQL 8.0。在早期版本中,另一种选择是关联子查询:
select t.*,
case when (select count(*) from mytable t1 where t1.location = t.location) > 1 then id end duplicate
from mytable t
我没有看到重复的<代码>具有
ID
=4
的A具有父ID
=2
,具有ID
=7
的A
具有父ID
=3
。两个A
都是唯一的。树结构中的哪个看起来像:Country->Country1->A
,分别是:Country->Country2->A
您的数据结构中的位置是什么?我已经对问题进行了更改。这是关于重复的“位置”值,而不是ID“位置”也是唯一的。见我之前的评论。第一个A
位于Country1
,第二个A
位于Country2
。假设一个纽约
城市可以存在于美国
和加拿大
甚至波兰
。至于我,这个问题并不清楚。所以,即使你的问题是正确的,我也不能投票支持你的答案。这句话:有重复的地方,因为有相同的名称,属于不同的县是完全理解错误。请看我对这个问题的评论。我不会说它们是重复的。我将使用相同的值来调用它们。所以,不管每一个都有不同的id,您必须承认您可以在列location中找到两个位置A和位置B。所以,我只想在列中添加重复的每个位置的id,而不是在列位置中找到一次
select t.*,
case when (select count(*) from mytable t1 where t1.location = t.location) > 1 then id end duplicate
from mytable t