it-swarm.com.de

Auswahl einer eindeutigen 2-Spalten-Kombination in MySQL

Ich habe eine MySQL-Tabelle, die folgendermaßen aussieht:

1   value1    value2    3534
2   value1    value1    8456
3   value1    value2    3566
4   value1    value3    7345
5   value2    value3    6734

Ich brauche eine Abfrage, um alle Zeilen mit unterschiedlichen Spalten 2 und 3 auszuwählen. Zum Beispiel sieht die Ausgabe, die ich für dieses Beispiel möchte, folgendermaßen aus:

1   value1    value2    3534
2   value1    value1    8456
4   value1    value3    7345
5   value2    value3    6734

ich habe ein paar Beispiele dafür gefunden, aber sie alle unterscheiden sich in jeder Spalte einzeln.

21
James Harzs

Angenommen, die erste Spalte ist eindeutig, können Sie Folgendes tun:

SELECT id, col2, col3, col4
FROM yourtable
WHERE id IN
(
    SELECT MIN(id)
    FROM yourtable
    GROUP BY col2, col3
)

Sehen Sie es online arbeiten: sqlfiddle

15
Mark Byers

Update 1

Besser verwenden Sie dies gegen oben.

SELECT id, col2, col3, col4
FROM yourtable
GROUP BY col2, col3;

Demo

Ich sage das so, weil ich mit CONCAT nicht das gewünschte Ergebnis in dieser Fall bekomme. Die erste Abfrage gibt mir 5 Zeilen zurück, CONCAT gibt mir jedoch 4 Zeilen zurück, was UNKORREKT ist.

Ich hoffe du hast meinen Punkt verstanden.


Angenommen, die Spalten in der Tabelle sind (id, col2, col3, col4).

SELECT DISTINCT(CONCAT(col2, col3)) as "dummy column", id, col2, col3, col4
FROM yourtable
GROUP BY CONCAT(col2, col3);

OR

SELECT id, col2, col3, MIN(col4)
FROM yourtable
GROUP BY col2, col3;

Live-Arbeitsbeispiel

27
Fahim Parkar

Angenommen, die Spalten in der Tabelle sind (id, col1, col2, col3), könnten Sie:

SELECT  *
FROM    YourTable yt
JOIN    (
        SELECT  MIN(id) as minid
        FROM    YourTable
        GROUP BY
                col1, col2
        ) filter
ON      filter.minid = yt.id
1
Andomar

Die einfachste Abfrage dafür ist 

SELECT col1, col2, MIN(col3)
FROM myTable
GROUP BY col1, col2
0
Sashi Kant

Wenn Sie die group by-Methode verwenden, werden mir zusätzliche Zeilen zurückgegeben, wobei jedes Feld explizit geprüft wird, obwohl länger dieselbe Anzahl von Datensätzen als count zurückgibt (Distinct ..).

SELECT id, col2, col3, col4
FROM yourtable yt
WHERE id =
(
 SELECT MIN(id)
 FROM yourtable yt1
 WHERE yt.col2 = yt1.col2
 AND yt.col3 = yt1.col3
)
0
Derya

Diese Abfrage stellt sicher, dass die Kombination aus column1 und column2 eindeutig ist, während der Mindestwert für Spalte drei ausgewählt wird

SELECT col1, col2, MIN(col3)
FROM yourTable
GROUP BY col1, col2
0
schadr