2016-11-09 21 views
0

我有一個看起來像這樣的表...找到共同擔保人的所有記錄

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) 

這就是我試過的。但它不會爲每個ID返回共同擔保人。

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) 
+0

你怎麼能確定共同保證人的紀錄? –

+0

同一成員有3名擔保人(編號:3306)所以他們是共同擔保人。 – shantanuo

回答

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