Tob*_*ias 2 postgresql sql-subselect
我有一个非常普通的表,带有另一个表的外键; 例如:
CREATE TABLE table_a (
id serial NOT NULL,
name text,
CONSTRAINT table_a_pkey PRIMARY KEY (id)
);
CREATE TABLE table_b (
id serial NOT NULL,
a_id integer, -- The foreign key
CONSTRAINT table_b_pkey PRIMARY KEY (id),
CONSTRAINT table_b_a_id_fkey FOREIGN KEY (a_id)
REFERENCES table_a (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
INSERT INTO table_a
VALUES (1, 'First row');
-- 2 entries in table_b which refer to the existing table_a row:
INSERT INTO table_b
VALUES (11, 1), (12, 1);
Run Code Online (Sandbox Code Playgroud)
现在我想有一个视图,它给出了一个table_b引用当前table_a行的所有行ID列表:
SELECT a.name,
(SELECT b.id
FROM table_b b
WHERE b.id = a.id) AS b_ids
FROM table_a a;
Run Code Online (Sandbox Code Playgroud)
但是,b_ids列是空的; 我想在那里有一些列表,包含值11和12.
在某处,我读到子选择只能产生一列(在这种情况下对我来说没问题)并且只有一行(这可以解释上述查询对我不起作用).如果这是真的 - 如何才能做到这一点呢?或者我真的需要为程序中的SELECT每一table_a行发出请求吗?
我希望这与PostgreSQL 9.1和9.3一起使用.
你可以使用这个array_agg功能:
SELECT table_a.name, array_agg(table_b.id)
FROM table_a
LEFT OUTER JOIN table_b
ON table_a.id = table_b.a_id
GROUP BY table_a.name;
?????????????????????????
? name ? array_agg ?
?????????????????????????
? First row ? {11,12} ?
?????????????????????????
(1 row)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2177 次 |
| 最近记录: |