ฉันเป้าหมายคือการสร้างการสืบค้นที่เอาเป็นรายการที่ป้อนซ้ำกันในแถวใช้ MySQL 5.7. ฉันฟังก์ชันปัจจุบันตรงกับรายการเดียวกันน้ำหนักอย่างไรก็ตามมันมีองปลอม (โปรดดูที่โต๊ะ 2)
นี่คือรายการโต๊ะด้วย
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 |
หลังจากปรับใช้กับการค้นหาของฉันซึ่งเป็น:
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 |
อย่างที่เราสามารถเห็นผลลัพท์ Lamok 2 and Lamok 4 had a 2 matches
Lamok 3 and Lamok 4 had a 2 matches too
มันไม่ควรจะเป็นไปได้...นี่คือนับว่าคนที่ซ้ำกันต่อสู้. ยังไงฉันสามารถหลีกเลี่ยงมันเป็นของ duplication ในของฉันกับการค้นหา?
นี่คือเป้าหมายของฉันตัวเลือกการไล่ระดับสี(ไม่ซ้ำกั)
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 |