我需要一些关于我正在做的Web应用程序的帮助。我需要将整个数据从A组复制到同一数据库表中的B组。但是,存在数据相同的情况。这是我的数据库表的一个例子
display
从上面的示例中,您可以看到 Alpha 和 Bravo 两者具有相同的确切年龄,并且它们同时存在于A组和A组中。 B.
我的问题是,是否可以检查在A组和A组中找到的具有相同名称和年龄的重复数据。 B使用查询?我想先找出哪些数据是相同的,这样我就可以删除B组中的重复 ONLY ,同时保持 Delta 的数据相同
我很新鲜&对SQL无能为力,因为我不知道任何类型的SQL可以检查A组和A组中的重复数据。乙
我希望你们能给我一个信息丰富的解释&回答我遇到的问题
感谢您的帮助
答案 0 :(得分:2)
PostgreSQL中的一个例子。使用duplicate_id_list,您可以获得重复的ID。您可以在删除查询中使用它来删除列表中第一个ID以外的所有内容。
SELECT Name,Age,count(id),string_agg(id, ', ') AS duplicate_id_list FROM
yourtable GROUP BY Name,Age having count(*) > 1
答案 1 :(得分:1)
您可以group by
与count
一起使用以获取多个组中存在的所有名称 - 年龄组合,例如:
SELECT name, age, COUNT(DISTINCT `group`) AS groups
FROM test
GROUP BY name, age
HAVING groups > 1;
以下是 SQL Fiddle 。
答案 2 :(得分: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')