查找所有记录的共同担保人

时间:2016-11-09 05:06:12

标签: mysql sql

我有一张看起来像这样的桌子......

drop table if exists test;

create table test (id int, member_id int, guarantor_id int);

insert into test values (1101, 1000, 1494);
insert into test values (1102, 3306, 3296);
insert into test values (1103, 3306, 1494);
insert into test values (1104, 3306, 5494);
insert into test values (1105, 9306, 7494);

mysql> select * from test;
+------+-----------+--------------+
| id   | member_id | guarantor_id |
+------+-----------+--------------+
| 1101 |      1000 |         1494 |
| 1102 |      3306 |         3296 |
| 1103 |      3306 |         1494 |
| 1104 |      3306 |         5494 |
| 1105 |      9306 |         7494 |
+------+-----------+--------------+
5 rows in set (0.00 sec)

我需要编写一个返回结果的查询......

+------+-----------+--------------+--------------+
| id   | member_id | guarantor_id | co_guarantor |
+------+-----------+--------------+--------------+
| 1101 |      1000 |         1494 |              | 
| 1102 |      3306 |         3296 | 1494, 5494   |
| 1103 |      3306 |         1494 | 3296, 5494   |
| 1104 |      3306 |         5494 | 3296, 1494   |
| 1105 |      9306 |         7494 |              |
+------+-----------+--------------+--------------+
5 rows in set (0.00 sec)

这是我尝试过的。但它并没有为每个身份都返回共同担保人。

mysql> select member_id, group_concat(guarantor_id) from test group by member_id;
+-----------+----------------------------+
| member_id | group_concat(guarantor_id) |
+-----------+----------------------------+
|      1000 | 1494                       |
|      3306 | 3296,1494,5494             |
|      9306 | 7494                       |
+-----------+----------------------------+
3 rows in set (0.00 sec)

1 个答案:

答案 0 :(得分:1)

您可以在SELECT中使用子查询:

select
  t1.member_id,
  (select 
     group_concat(t2.guarantor_id)
   from test t2
   where
     t2.member_id = t1.member_id
     and t2.guarantor_id <> t1.guarantor_id)
from test t1;

ONLINE DEMO