MYSQL 两列不同
MYSQL Distinct for two column
我的 table 中有两列:发件人、收件人。我想在发送者或接收者等于 b 的两列中得到不同的值,然后将它们连接成字符串。
....................
sender | receiver
....................
a b
c b
b a
b c
d f
b e
b e
e b
结果集应该类似于 a,b,c,e
我应该怎么做才能做到这一点?
看看这个线程:MySQL SELECT DISTINCT multiple columns
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
您只需执行 2 个联合查询即可获取值。 Union 应该消除重复项。然后您可以将其用作子查询并对结果执行 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
试试这个:
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' order by sender
替换select 'b'
,你会得到a,b,c,e
作为结果
我的 table 中有两列:发件人、收件人。我想在发送者或接收者等于 b 的两列中得到不同的值,然后将它们连接成字符串。
....................
sender | receiver
....................
a b
c b
b a
b c
d f
b e
b e
e b
结果集应该类似于 a,b,c,e
我应该怎么做才能做到这一点?
看看这个线程:MySQL SELECT DISTINCT multiple columns
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
您只需执行 2 个联合查询即可获取值。 Union 应该消除重复项。然后您可以将其用作子查询并对结果执行 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
试试这个:
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' order by sender
替换select 'b'
,你会得到a,b,c,e
作为结果