2015-07-19 83 views
1

我有2個表,一個是一組真實姓名,另一個是爲這些人設置的別名集合。我想從實名錶中選擇,但在實名的每個值中包含別名表中的所有值。我會怎麼做呢?SQL:將別名添加到列值

CREATE TABLE PEOPLE(
    ID SERIAL PRIMARY KEY, 
    NAME VARCHAR(64) 
); 
INSERT INTO PEOPLE(NAME)VALUES('BRUCE'),('CLARK'),('STEVE'); 

CREATE TABLE ALIASES(
    ID SERIAL PRIMARY KEY, 
    PID INTEGER REFERENCES PEOPLE(ID), 
    NAME VARCHAR(64) 
); 
INSERT INTO ALIASES(PID,NAME)VALUES 
(1,'BATMAN'),(2,'SUPERMAN'),(3,'CAPTAIN AMERICA'),(1,'THE DARK KNIGHT'); 

我想結果看下面,以便我可以對該列值進行全文搜索。

> SELECT NAME FROM PEOPLEALIASED; 
NAME 
----- 
BRUCE BATMAN THE DARK KNIGHT 
CLARK SUPERMAN 
STEVE CAPTAIN AMERICA 

回答

1

你可以做到這一點與string_agg()

select p.name || string_agg(a.name, ' ') 
from people p 
join aliases a 
on  p.id = a.pid 
group by 
     p.name 

Example at SQL Fiddle.

+0

有沒有一些方法來concocnate 2列這將返回到1列? – HSchmale

+1

將它從p.name,string_agg(a.name,',')更改爲p.name || string_agg(a.name,'') – Gary