2015-07-19 48 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