我想从表中删除除了一个记录以外的所有记录,其中名称字段重复相同的值超过5次,并且地址字段重复更多比一张桌子的五倍还多。因此,如果有5条记录与名称字段和地址字段是所有5个相同的,那我想删除4,满分5一个例子:使用sql来保留名称字段和地址字段都在5+记录中重复的单个记录
id name address
1 john 6440
2 john 6440
3 john 6440
4 john 6440
5 john 6440
我只想要回1项纪录从上面的5条记录。
我仍然有这个问题。
1)我创建一个名为KeepThese的表并为其提供主键ID。 2)我创建了一个名为delete_1查询并复制到它的:
INSERT INTO KeepThese
SELECT ID FROM
(
SELECT Min(ID) AS ID
FROM Print_Ready
GROUP BY names_1, addresses
HAVING COUNT(*) >=5
UNION ALL
SELECT ID FROM Print_Ready as P
INNER JOIN
(SELECT Names_1, addresses
FROM Print_ready
GROUP BY Names_1, addresses
HAVING COUNT(*) < 5) as ThoseLessThan5
ON ThoseLessThan5.Names_1 = P.Names_1
AND ThoseLessThan5.addresses = P.addresses
)
3)我创建一个查询名为delete_2并拷贝到这一点:
DELETE P.* FROM Print_Ready as P
LEFT JOIN KeepThese as K
ON K.ID = P.ID
WHERE K.ID IS NULL
4)然后我跑delete_1。我得到一个消息,说: “循环引用引起的别名ID” 所以我改变这片: FROM(SELECT MIN(ID)AS标识 这样说: FROM(SELECT MIN(ID)AS ID2 然后我双击再次显示一个弹出窗口,显示输入参数值为ID.This表示它不知道什么是ID,但是print_ready只是一个查询,而它有一个ID,实际上是另一个表的ID被过滤到此查询。
不知道该怎么在这一点上做的。
'最小(P.ID)由于ID'不应该含糊不清。但它似乎确实会遗漏掉很多SQL。 – 2010-10-19 01:44:06