別のテーブルへの外部キーを持つごく普通のテーブルがあります。例えば:
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
ここで、現在の行を参照する行のすべての ID のリストを表示するビューが必要ですtable_a
。
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 を含むある種のリストが必要です。
どこかで、副選択では 1 つの列 (この場合は問題ありません)と 1 つの行しか得られないことを読んだことがあります(これは、上記のクエリが機能しないことを説明します)。これが本当なら、代わりにどのようにこれを行うことができますか? それとも、プログラム内SELECT
のすべての行に対してリクエストを発行する必要があるのでしょうか?table_a
これを PostgreSQL 9.1 および 9.3 で動作させたいと考えています。