Mysql 是否仍然可以从c#中的两个不同查询返回datatable中的相同数据?

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 从上面的例子中,你可以

我需要一些关于我正在做的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 
从上面的例子中,你可以看到AlphaBravo两个组的确切年龄相同,并且都存在于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组中的重复数据,同时保持增量数据不变”谢谢你的帮助!:)谢谢你的帮助!:)