Mysql 查找分配给多个唯一值的重复值
我需要一个可以比较两列的查询(DBVersionKey,Desc19)。 逻辑-如果同一Desc19用于多个DBVersionKey,则仅返回这些结果。下面是数据范围(代码段) 数据样本Mysql 查找分配给多个唯一值的重复值,mysql,sql,sql-server,sql-server-2008,Mysql,Sql,Sql Server,Sql Server 2008,我需要一个可以比较两列的查询(DBVersionKey,Desc19)。 逻辑-如果同一Desc19用于多个DBVersionKey,则仅返回这些结果。下面是数据范围(代码段) 数据样本 DBVersionKey Desc19 2491 W25170206H 2492 W25170212H 2493 W25170218H 2494 W25170224H 9129 40761KB18
DBVersionKey Desc19
2491 W25170206H
2492 W25170212H
2493 W25170218H
2494 W25170224H
9129 40761KB18X
9191 40761KB18X
EXPECTED RESULT
DBVersionKey Desc19
9129 40761KB18X
9191 40761KB18X
*我曾尝试过分组、计数和许多其他理论解决方案
我不希望查询包含数据值的任何细节,因为受影响记录的数量可能很大
表名称-表A
select
a.*
from
Table_A as a
inner join
(select Desc19
from Table_A
group by Desc19
having count(*) > 1) as b
on a.Desc19 = b.Desc19 ORDER BY Desc19
我建议使用带有行号分区的公共表表达式。这将创建Desc19的每个实例的计数(RN)
我现在无法测试查询,但请随时向我更新您的结果,我可以从中进行调整
编辑
如果DBVersionKey不是唯一值,我将尝试:
SELECT DISTINCT DBVersionKey, Desc19, COUNT(*)
FROM Table_A
Group by DBVersionKey, Desc19
如果效果更好,请告诉我
编辑2
再一次,我无法测试它。向第一个建议的查询中添加:
WITH CTE AS (SELECT DBVersionKey, Desc19, ROW_NUMBER()OVER(PARTITION BY Desc19 ORDER BY Desc19) RN
FROM (SELECT DISTINCT DBVersionKey, Desc19 FROM Table_A GROUP BY DBVersionKey, Desc19)
SELECT * FROM CTE WHERE RN > 1
基于alybaba726编辑2的正确解决方案
WITH CTE AS (SELECT DBVersionKey, Desc19, ROW_NUMBER()OVER(PARTITION BY Desc19
ORDER BY Desc19) RN FROM ix_spc_planogram GROUP BY DBVersionKey, Desc19)
SELECT * FROM CTE
WHERE RN > 1
ORDER BY RN
您的
GROUP BY
子句将同时需要PK和Desc19,我认为这不起作用。您的意思是DBVersionKey,Desc19?prem89,我已经尝试过了,但收到了以下错误:“ix_spc_planogram.DBVersionKey”列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。@prem89是,DBVersionKey(表的主键[PR])@Elliott_T-SQL检查此更新的查询。这行得通吗?mysql
或sql server
?alybaba这部分行得通,非常好。问题1-需要更改结果以防止显示重复的DBVersionKey和Desc19值(不同?)问题2-计数为3的计数具有3个不同值或2个不同值此编辑可能无法满足您的需要,请运行它并通知我!^与第二个查询相关,第一个查询没有提供正确的结果。因此,我希望能够测试这些结果。请参见编辑#2。括号似乎无效,因为第一个DBVersionKey Desc19显示为无效列名。最后一次选择应为、ID或带引号的ID
WITH CTE AS (SELECT DBVersionKey, Desc19, ROW_NUMBER()OVER(PARTITION BY Desc19
ORDER BY Desc19) RN FROM ix_spc_planogram GROUP BY DBVersionKey, Desc19)
SELECT * FROM CTE
WHERE RN > 1
ORDER BY RN