[英]MySQL delete duplicates in same table
我一直在猛烈抨擊這個問題,並在堆棧交換中查看了一些類似的情況,而且閱讀得越多,我就會感到困惑! 我有一個包含以下內容的表:
id | zipcode | provider | channel
---------------------------------
1 | 91773 | 342 | 0
2 | 91773 | 2261 | 177
3 | 91773 | 5590 | 0
4 | 91773 | 5590 | 0
5 | 91773 | 5590 | 135
6 | 91773 | 5590 | 0
7 | 91773 | 6010 | 0
8 | 91773 | 6010 | 0
我只想保留一條記錄,如果頻道中只有0記錄,那么我們保留它。 因此它應該返回以下內容:
id | zipcode | provider | channel
---------------------------------
1 | 91773 | 342 | 0
2 | 91773 | 2261 | 177
5 | 91773 | 5590 | 135
8 | 91773 | 6010 | 0
我嘗試了很多查詢,但沒有一個起作用。 提前致謝。
編輯:我已經嘗試過給出的一些示例,但是似乎都沒有給出正確的信息,一個更好的示例是使用這些示例,您可以看到原因:插入到獨角獸值中
(1, 91773, 342, 0),
(2, 91773, 2261, 177),
(3, 91773, 5590, 0),
(4, 91773, 5590, 0),
(5, 91773, 5590, 135),
(6, 91773, 5590, 0),
(7, 91773, 6010, 0),
(8, 91773, 6010, 0),
(9, 91776, 5590, 135),
(10, 91776, 5590, 0),
(11, 91776, 6010, 0),
(12, 91776, 6010, 0);
這樣的事情應該起作用...
DELETE unicorns
FROM unicorns
WHERE id NOT IN (SELECT id
FROM (SELECT unicorns.provider,
Max(id) AS id
FROM unicorns
LEFT JOIN (SELECT provider,
Max(channel) AS channel
FROM unicorns
GROUP BY provider) p
ON p.provider = unicorns.provider
AND p.channel = unicorns.channel
WHERE p.provider IS NOT NULL
GROUP BY unicorns.provider) p2)
您可以使用自連接執行此操作。 如果您只是刪除:
DELETE a
FROM foo a
JOIN foo b on (a.zipcode = b.zipcode AND a.provider = b.provider)
WHERE
a.channel < b.channel;
如果要在刪除之前查看數據(剩下的內容):
SELECT *
FROM foo
WHERE ID NOT IN (
SELECT a.id
FROM foo a
JOIN foo b on (a.zipcode = b.zipcode AND a.provider = b.provider)
WHERE
a.channel < b.channel);
我認為您可以使用以下方式:
delete from unicorns
where id not in (
SELECT * FROM (
SELECT MAX(id)
FROM unicorns
WHERE (provider, zipcode, channel) IN (
SELECT provider, zipcode, max(channel) mx_channel
FROM unicorns
GROUP BY provider, zipcode
)
GROUP BY provider, zipcode) s)
請看這里的小提琴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.