我有一个非常普通的表,其中包含另一个表的外键;例如:
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);
现在我想要一个视图,它为我提供了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;
但是,该b_ids
列是空的;我想在那里有一些列表,包含值 11 和 12。
在某处我读到子选择只能产生一列(在这种情况下对我来说可以)和一行(这可以解释上述查询对我不起作用)。如果这是真的 - 如何才能做到这一点?还是我真的需要为程序SELECT
中的每一table_a
行发出请求?
我希望它可以与 PostgreSQL 9.1 和 9.3 一起使用。