Mysql kullanarak yinelenen bir girişi kaldıran sorgu

0

Soru

Hedefim, MySQL 5.7'yi kullanarak üst üste yinelenen bir girişi kaldıran bir sorgu oluşturmaktır. Geçerli işlevim aynı ağırlığa sahip girdilerle eşleşir, ancak bir kopyası vardır. (Lütfen 2. tabloya bakınız)

İşte giriş masam.

entryID| entryName  | weight |
-------------------------------
1      | lamok2     | 1970 |
2      | lamok2     | 1955 |
3      | lamok3     | 1965 |
4      | lamok3     | 1975 |
5      | lamok3     | 1985 |
6      | lamok4     | 1955 |
7      | lamok4     | 1960 |
8      | lamok4     | 1975 |
9      | lamok5     | 1955 |
10     | MA1        | 2000 |
11     | MA2        | 2010 |

Sorgumu uyguladıktan sonra hangisi:

SELECT t1.entryName  AS mname, t1.weight AS weight,
        MIN(t2.entryName) AS wname,MIN(t2.weight) AS weight
FROM entry t1
LEFT JOIN entry t2 ON t1.weight = t2.weight AND t1.entryName != t2.entryName
GROUP BY t1.entryID, t1.entryName, t1.weight

it produces this:

mname| weight | wname  | weight| 
--------------------------------------------
lamok2 | 1970 | NULL   | NULL   |
lamok2 | 1955 | lamok4 | 1955   |
lamok3 | 1965 | NULL   | NULL   |
lamok3 | 1975 | lamok4 | 1975   |
lamok3 | 1985 | NULL   | NULL   |
lamok4 | 1955 | lamok2 | 1955   |
lamok4 | 1960 | NULL   | NULL   |
lamok4 | 1975 | lamok3 | 1975   |
lamok5 | 1955 | lamok2 | 1955   |
MA1    | 2000 | NULL   | NULL   |
MA2    | 2010 | NULL   | NULL   |

Sonuçtan da görebileceğimiz gibi, Lamok 2 and Lamok 4 had a 2 matches Lamok 3 and Lamok 4 had a 2 matches too... Bu mümkün olmamalı... Bu yinelenen mücadele olarak sayılır. Sorgumda bu tür bir çoğaltmayı nasıl önleyebilirim?

Bu benim hedef çıktımdır: (Yinelenen kavga yok)

 mname| weight | wname  | weight| 
    --------------------------------------------
    lamok2 | 1970 | NULL   | NULL   |
    lamok2 | 1955 | lamok4 | 1955   |
    lamok3 | 1965 | NULL   | NULL   |
    lamok3 | 1975 | lamok4 | 1975   |
    lamok3 | 1985 | NULL   | NULL   |
    lamok4 | 1960 | NULL   | NULL   |
    lamok5 | 1955 | lamok2 | 1955   |
    MA1    | 2000 | NULL   | NULL   |
    MA2    | 2010 | NULL   | NULL   |
database mysql
2021-11-24 05:26:19
1

En iyi cevabı

0

Bence iki sütuna göre gruplandırmanız gerekiyor entryName ve weight.

Yani bu sorgu kopyalarınızı döndürür:

SELECT *
FROM entry
GROUP BY entryName, weight
HAVING COUNT(*) > 1

Çoğaltılmış bulduğunuzda, bunları silebilirsiniz. Bunları sorgu ile silmek isterseniz, bunun gibi bir şey kullanabilirsiniz:

DELETE FROM entry
WHERE entryID IN (
    SELECT e.entryID 
    FROM entry AS e
    GROUP BY e.entryName, e.weight
    HAVING COUNT(*) > 1
)
2021-11-24 09:08:29

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................