Mysql
 sql >> Datenbank >  >> RDS >> Mysql

sql eindeutig und erhält 2 Spalten

Sie sollten beide Spalten vereinen und dann nach unterschiedlichen Werten filtern:

select distinct T.from_to from
( select `from` as from_to
  from messages
  union
  select `to` as from_to
  from messages
) T

Wenn Sie wirklich alles in einer durch Kommas getrennten Zeichenfolge benötigen, verwenden Sie GROUP_CONCAT([DISTINCT] Aggregationsfunktion.

BEARBEITET :

Sie sollten die Antwort von Gerald als Lösung markieren. Testen Sie den Union-Operator und lesen Sie die Dokumentation zum mysql-Union-Operator erneut , standardmäßig mysql-Filter für eindeutige Werte:

mysql> create table ta( a int );
Query OK, 0 rows affected (0.05 sec)

mysql> insert into ta values (1),(1),(2);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from ta
    -> union
    -> select * from ta;
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

dann die letzte Abfrage ist:

  select `from` as from_to
  from messages
  union distinct
  select `to` as from_to
  from messages

Beachten Sie, dass distinct ist nicht zwingend erforderlich.

Nur wenn Sie eine kommagetrennte Zeichenfolge benötigen, ist die erste Lösung erforderlich:

select distinct GROUP_CONCAT( distinct T.from_to from )
( select `from` as from_to
  from messages
  union
  select `to` as from_to
  from messages
) T