2016-01-25 43 views
-6

三列表; ID,TERM,同义词sql内连接单表

1, IDENTITY, CHARACTER 
2, IDENTITY, EXISTENCE 
3, IDENTITY, IDENTIFICATION 
4, IDENTITY, INTEGRITY 
5, IDENTITY, NAME 
6, CIRCUMSTANCES, ASSETS 
7, CIRCUMSTANCES, CAPITAL 
8, CIRCUMSTANCES, CHANCES 

我需要的结果返回不同的“术语”有关联“同义字(词)”消除多对多并带回一对多作为结果。

1, IDENTITY, CHARACTER | EXISTENCE | IDENTIFICATION | INTEGRITY | NAME 
6, CIRCUMSTANCES, ASSETS |CAPITAL | CHANCES 

或者,

1,TERM = “同一性” SYNONYM = “字符” SYNONYM = “存在” SYNONYM = “识别” SYNONYM = “完整性” SYNONYM = “NAME”

2 ,TERM = “情况” SYNONYM = “资产” SYNONYM = “CAPITAL” SYNONYM = “CHANCES”

+2

请澄清你的问题。 – dan08

+2

http://stackoverflow.com/help/how-to-ask – Sebas

+3

哪个rdbms好吗? – muratgu

回答

1

如果你正在使用MySQL,你可以使用GROUP_CONCAT

SELECT MIN(`ID`), `TERM`, GROUP_CONCAT(`SYNONYM`, ' | ') 
FROM my_table 
GROUP BY `TERM`; 
+0

感谢post.GROUP_CONCAT未被识别 – keydrive

0

Oracle解决方案 - 因为11克:

with sample as 
(
    select 1 ID, 'IDENTITY' term , 'CHARACTER' syn from dual 
    union all 
    select 2, 'IDENTITY', 'EXISTENCE' from dual 
    union all 
    select 3, 'IDENTITY', 'IDENTIFICATION' from dual 
    union all 
    select 4, 'IDENTITY', 'INTEGRITY' from dual 
    union all 
    select 5, 'IDENTITY', 'NAME' from dual 
    union all 
    select 6, 'CIRCUMSTANCES', 'ASSETS' from dual 
    union all 
    select 7, 'CIRCUMSTANCES', 'CAPITAL' from dual 
    union all 
    select 8, 'CIRCUMSTANCES', 'CHANCES' from dual 
) 
select min(id) id, term, 
listagg(syn,'|') within group(order by syn) syns 
from sample 
group by term; 

输出:

 ID TERM   SYNS 
---------- ------------- ------------------------------------------------------ 
     6 CIRCUMSTANCES ASSETS|CAPITAL|CHANCES 
     1 IDENTITY  CHARACTER|EXISTENCE|IDENTIFICATION|INTEGRITY|NAME 
+0

这是针对DB2的,不喜欢WITHIN,但我现在已经有了一个好的图片,并且会通过它。谢谢! – keydrive