Я получил две колонки: отправитель, получатель в моей таблице. Я хочу получить отличительные для обоих столбцов, где отправитель или получатель равен b, а затем объединить их в строку.
....................
sender | receiver
....................
a b
c b
b a
b c
d f
b e
b e
e b
Набор результатов должен выглядеть как a, b, c, e
Что я должен сделать, чтобы достичь этого?
Вы можете просто сделать 2 объединенных запроса, чтобы получить значения. Союз должен устранить дубликаты. Затем вы можете использовать это как подзапрос и выполнить GROUP_CONCAT для результатов:
SELECT GROUP_CONCAT(aCol)
FROM
(
SELECT sender AS aCol
FROM SomeTable
WHERE sender = 'b'
OR receiver = 'b'
UNION
SELECT receiver AS aCol
FROM SomeTable
WHERE sender = 'b'
OR receiver = 'b'
) sub0
Взгляните на эту тему: MySQL SELECT DISTINCT несколько столбцов
SELECT DISTINCT value FROM
(
SELECT DISTINCT a AS value FROM my_table
UNION
SELECT DISTINCT b AS value FROM my_table
UNION
SELECT DISTINCT c AS value FROM my_table
) AS derived
Попробуй это:
create table test (sender char(1), receiver char(1));
insert into test values ('a','b'), ('c','b'), ('b','a'), ('b','c'), ('d','f'), ('b','e'), ('b', 'e'), ('e', 'b');
select group_concat(sender separator ',') as result
from (
select sender from test where receiver = 'b'
union
select 'b'
) alias;
+---------+
| result |
+---------+
| a,c,e,b |
+---------+
Если вы хотите алфавитный порядок, вы можете заменить select 'b'
с select 'b' order by sender
и вы получите a,b,c,e
в результате