psql (PostgreSQL) 14.1
実現したいこと
別のレコードを参照して、
レコードが存在すればその値を使う。
レコードが無ければ任意の値を入れる。
ただし、カラムはnot null。
下に記載の構造のテーブルのため、
WHEREで指定したidのレコードのデータを使ってInsertする。
INSERT INTO test VALUES ( 4, CASE WHEN (SELECT val1 FROM test WHERE id = 1) IS NULL THEN 'nullでした' ELSE (SELECT val1 FROM test WHERE id = 1) END, CASE WHEN (SELECT val2 FROM test WHERE id = 1) IS NULL THEN 'nullでした' ELSE (SELECT val2 FROM test WHERE id = 1) END );
上記で実現はできましたが、
同じまたは似た内容のサブクエリが複数出てきていました。
極力無駄な参照は避けたいのですが、どのように改善すれば良いですか?
前提
テーブルの構造
-- Table: public.test -- DROP TABLE IF EXISTS public.test; CREATE TABLE IF NOT EXISTS public.test ( id integer NOT NULL, val1 text COLLATE pg_catalog."default" NOT NULL, val2 text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT test_pkey PRIMARY KEY (id) ) TABLESPACE pg_default; ALTER TABLE IF EXISTS public.test OWNER to postgres;
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。