Mysql 是否仍然可以从c#中的两个不同查询返回datatable中的相同数据?
我需要一些关于我正在做的web应用程序的帮助。我需要将整个数据从组A复制到同一数据库表中的组B。但是,在某些情况下,数据是相同的。下面是我的数据库表的一个示例Mysql 是否仍然可以从c#中的两个不同查询返回datatable中的相同数据?,mysql,sql,Mysql,Sql,我需要一些关于我正在做的web应用程序的帮助。我需要将整个数据从组A复制到同一数据库表中的组B。但是,在某些情况下,数据是相同的。下面是我的数据库表的一个示例 id Name Age Group ----------------------- 1 Alpha 11 A 2 Bravo 12 A 3 Alpha 11 B 4 Bravo 12 B 5 Delta 11 B 从上面的例子中,你可以
id Name Age Group
-----------------------
1 Alpha 11 A
2 Bravo 12 A
3 Alpha 11 B
4 Bravo 12 B
5 Delta 11 B
从上面的例子中,你可以看到Alpha和Bravo两个组的确切年龄相同,并且都存在于A组和B组
我的问题是,是否可以使用查询来检查在A组和B组中发现的具有相同确切名称和年龄的任何重复数据?我想先找出哪些数据是相同的,这样我就可以只删除B组中的重复数据,同时保持增量的数据相同
我对SQL非常陌生,因为我不知道任何类型的SQL可以检查在A组和B组中发现的重复数据
我希望你们能给我一个信息丰富的解释,并回答我面临的问题
感谢您的帮助您可以使用
groupby
和count
获取多个组中存在的所有姓名年龄组合,例如:
SELECT name, age, COUNT(DISTINCT `group`) AS groups
FROM test
GROUP BY name, age
HAVING groups > 1;
以下是您可以使用
分组依据
和计数
来获取多个组中存在的所有姓名年龄组合,例如:
SELECT name, age, COUNT(DISTINCT `group`) AS groups
FROM test
GROUP BY name, age
HAVING groups > 1;
下面是PostgreSQL中的一个示例。使用重复的id列表,您可以获得重复的id。您可以在删除查询中使用此选项删除列表中除第一个id以外的所有id
SELECT Name,Age,count(id),string_agg(id, ', ') AS duplicate_id_list FROM
yourtable GROUP BY Name,Age having count(*) > 1
PostgreSQL中的一个示例。使用重复的id列表,您可以获得重复的id。您可以在删除查询中使用此选项删除列表中除第一个id以外的所有id
SELECT Name,Age,count(id),string_agg(id, ', ') AS duplicate_id_list FROM
yourtable GROUP BY Name,Age having count(*) > 1
要查找组B的重复ID,请执行如下内部自联接:
SELECT tb.id
FROM YourTable AS ta
JOIN YourTable AS tb ON ta.name=tb.name AND ta.age=tb.age
WHERE ta.group='A'
AND tb.group='B'
您可以在删除中使用此选项,这将仅在需要时从组B中删除重复记录:
DELETE YourTable
WHERE id IN (
SELECT tb.id
FROM YourTable AS ta
JOIN YourTable AS tb ON ta.name=tb.name AND ta.age=tb.age
WHERE ta.group='A'
AND tb.group='B')
要查找组B的重复ID,请执行如下内部自联接:
SELECT tb.id
FROM YourTable AS ta
JOIN YourTable AS tb ON ta.name=tb.name AND ta.age=tb.age
WHERE ta.group='A'
AND tb.group='B'
您可以在删除中使用此选项,这将仅在需要时从组B中删除重复记录:
DELETE YourTable
WHERE id IN (
SELECT tb.id
FROM YourTable AS ta
JOIN YourTable AS tb ON ta.name=tb.name AND ta.age=tb.age
WHERE ta.group='A'
AND tb.group='B')
这将获得重复记录的“随机”ID,例如,is可能是组a或B中的一个。根据MySQL的版本和配置,选择不带聚合函数的未分组列通常是一个错误和错误,请参阅和@Lucero感谢您指出这一点。我已经更新了我的答案(删除的id)作为OP想要的姓名和年龄。我想OP想要重复的B组记录的id:“我想先找出哪些数据是相同的,这样我就可以删除B组中的重复数据,同时保持增量的数据不变”这会给你一个重复记录的“随机”id,例如,is可能是A组或B组中的一个。根据MySQL的版本和配置,选择没有聚合函数的未分组列通常是一个错误和错误,请参阅和@Lucero感谢您指出这一点。我已经更新了我的答案(删除的id)作为OP想要的姓名和年龄。我想OP想要重复的B组记录的id:“我想先找出哪些数据是相同的,这样我可以删除B组中的重复数据,同时保持增量数据不变”谢谢你的帮助!:)谢谢你的帮助!:)