sql >> Databasteknik >  >> RDS >> Mysql

sql distinkt, får 2 kolumner

Du bör kombinera båda kolumnerna och sedan filtrera efter distinkta värden:

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

om du verkligen behöver allt i en kommaseparerad sträng, använd GROUP_CONCAT([DISTINCT] aggregeringsfunktion.

REDIGERAD :

Du bör markera som lösning Gerald svar. Efter testning av fackföreningsoperatör och läs om dokumentationen för mysql fackföreningsoperatör , som standard, mysql-filter för distinkta värden:

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)

sedan den slutliga frågan är:

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

Lägg märke till att distinct är inte obligatoriskt.

Endast om du behöver en kommateckensträng är den första lösningen nödvändig:

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


  1. Mysql json datatyp count och groupby

  2. Samla annonsklick och visningar

  3. EF och TransactionScope för både SQL Server och Oracle utan att eskalera/spänna till DTC?

  4. 3 sätt att hitta rader som innehåller små bokstäver i MySQL