SQL:将别名添加到列值

时间:2015-07-19 14:16:05

标签: postgresql

我有2个表,一个是一组真实姓名,另一个是那些人的别名集合。我想从实名表中进行选择,但是在realname表中为realname中的每个值包含所有值。我该怎么做呢?

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 个答案:

答案 0 :(得分: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.