我想從表中刪除除了一個記錄以外的所有記錄,其中名稱字段重複相同的值超過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