Powinieneś połączyć obie kolumny, a następnie filtrować według różnych wartości:
select distinct T.from_to from
( select `from` as from_to
from messages
union
select `to` as from_to
from messages
) T
jeśli naprawdę potrzebujesz wszystkiego w oddzielnym ciągu przecinkami, użyj GROUP_CONCAT([DISTINCT] funkcja agregacji.
EDYTOWANO :
Jako rozwiązanie należy oznaczyć odpowiedź Geralda. Po przetestowaniu operatora związku i ponownie przeczytaj dokumentację operatora związku mysql , domyślnie filtr mysql dla różnych wartości:
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)
następnie ostatnie zapytanie jest:
select `from` as from_to
from messages
union distinct
select `to` as from_to
from messages
Zauważ, że distinct
nie jest obowiązkowe.
Tylko jeśli potrzebujesz ciągu z rozdzielonymi przecinkami, konieczne jest pierwsze rozwiązanie:
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