Angenommen, ich habe Spalten a, b c, d
in einer Tabelle in einer MySQL-Datenbank. Ich versuche, die unterschiedlichen Werte ALLER dieser 4 Spalten in meiner Tabelle auszuwählen (nur die unterschiedlichen Werte). Ich habe Sachen ausprobiert wie:
SELECT DISTINCT a,b,c,d FROM my_table;
SELECT DISTINCT a,b,c,d FROM my_table GROUP BY a,b,c,d;
Keiner von denen hat funktioniert. Kann hier jemand helfen?
Vielen Dank
HINWEIS Ich möchte die unterschiedlichen Werte der Spalten a, b, c d
separat. Nicht die eindeutige Kombination von Werten
Antworten:
kann das helfen?
select (SELECT group_concat(DISTINCT a) FROM my_table) as a, (SELECT group_concat(DISTINCT b) FROM my_table) as b, (SELECT group_concat(DISTINCT c) FROM my_table) as c, (SELECT group_concat(DISTINCT d) FROM my_table) as d
quelle
REPLACE(group_concat(DISTINCT d),',',' ')
Ich weiß, dass die Frage sowieso zu alt ist:
select a, b from mytable group by a, b
wird Ihnen alle Kombinationen geben.
quelle
Wenn Sie die gewünschten Ergebnisse erraten, ist dies möglicherweise die gewünschte Abfrage
SELECT DISTINCT a FROM my_table UNION SELECT DISTINCT b FROM my_table UNION SELECT DISTINCT c FROM my_table UNION SELECT DISTINCT d FROM my_table
quelle
SELECT DISTINCT value FROM ( SELECT DISTINCT a AS value FROM my_table UNION SELECT DISTINCT b AS value FROM my_table UNION SELECT DISTINCT c AS value FROM my_table ) AS derived
SELECT e,f FROM ( SELECT DISTINCT zdjh AS e FROM
tj_xhqd` UNION SELECT DISTINCT sjsj AS f VONtj_xhqd
UNION SELECT DISTINCT xhqd AS g FROMtj_xhqd
) a` gibt mirError Code: 1054 Unknown column 'f' in 'field list'
Ein anderer einfacher Weg, dies zu tun, ist mit
concat()
SELECT DISTINCT(CONCAT(a,b)) AS cc FROM my_table GROUP BY (cc);
quelle
Beide Ihre Fragen sind korrekt und sollten Ihnen die richtige Antwort geben.
Ich würde die folgende Abfrage vorschlagen, um Ihr Problem zu beheben.
SELECT DISTINCT a,b,c,d,count(*) Count FROM my_table GROUP BY a,b,c,d order by count(*) desc
Das ist das Feld count (*) hinzufügen. Auf diese Weise erhalten Sie eine Vorstellung davon, wie viele Zeilen mit dem Befehl group entfernt wurden.
quelle
where
Bedingung aufzunehmen? Ich wollte nur Zeilen, in denen die Anzahl größer als 1 war. Versucht,select distinct a,b,c,count(*) from MyTempTable group by a,b,c order by count(*) desc where count(*)>1;
aber es hat nicht funktioniert.having count(*) > 1
nicht verwenden,where
da dies eine aggregierte Abfrage ist. Übrigens geht meine Antwort nicht genau auf die OP-Frage ein, wie er oben beschrieben wurde. Sowieso gerne helfen.distinct a,b,c,count(*) from MyTable group by a,b,c having count(*) > 1 order by count(*) desc
Dies gibt DISTINCT-Werte in allen Spalten an:
SELECT DISTINCT value FROM ( SELECT DISTINCT a AS value FROM my_table UNION SELECT DISTINCT b AS value FROM my_table UNION SELECT DISTINCT c AS value FROM my_table ) AS derived
quelle