Mysql
 sql >> Base de données >  >> RDS >> Mysql

sql distinct, obtenant 2 colonnes

Vous devez unir les deux colonnes, puis filtrer les valeurs distinctes :

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

si vous avez vraiment besoin de tout dans une chaîne séparée par des virgules, utilisez GROUP_CONCAT([DISTINCT] fonction d'agrégation.

EDITÉ :

Vous devez marquer comme solution la réponse de Gerald. Après avoir testé l'opérateur union et relisez la la documentation de l'opérateur union mysql , par défaut, filtre mysql pour les valeurs distinctes :

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)

puis, la requête finale est :

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

Notez que distinct n'est pas obligatoire.

Seulement si vous avez besoin d'une chaîne séparée par des virgules, la première solution est nécessaire :

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