Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

sql distinto, obtendo 2 colunas


Você deve unir as duas colunas e depois filtrar por valores distintos:
select distinct T.from_to from
( select `from` as from_to
  from messages
  union
  select `to` as from_to
  from messages
) T

se você realmente precisar de tudo em uma string separada por vírgula, use GROUP_CONCAT([DISTINCT] função de agregação.

EDITADO :

Você deve marcar como solução a resposta de Gerald. Após testar o operador de união e reler a documentação do operador de união do mysql , por padrão, filtro mysql para valores distintos:
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)

em seguida, a consulta final é:
  select `from` as from_to
  from messages
  union distinct
  select `to` as from_to
  from messages

Observe que distinct não é obrigatório.

Somente se você precisar de uma string separada por vírgulas, a primeira solução é necessária:
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