쿼리를 제거하는 중복 항목을 사용하여 mysql

0

질문

내 대상을 만드는 것입 쿼리를 제거하는 중복 항목을 사용하여 한 행에서 MySQL5.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...지 가능한 이산으로 중복되는 싸움입니다. 을 피할 수 있는 방법은 이런 종류의 복제로서 쿼리?

이것은 나의 목표는 출력:(중복되지 않 싸움)

 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

최고의 응답

0

생각해야 할 그룹에 의해 두 개의 열에 의하여, entryNameweight.

그래서 이를 통해 전달할 수 있습니다.의 중복:

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

을 찾을 때 중복된 후 삭제할 수 있습니다. 삭제하려면으로 그들을 쿼리,당신은 다음과 같은 코드를 사용하면 됩니다:

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

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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