SQLで条件分岐の結果によって異なる条件で検索したいです。※条件は以降に記載
DBはPostgreSQLです。
CASE文など試行錯誤してみたのですがうまくいかず、そもそもこのようなことができるのかすら不明な状態で困り果てています。ご教授のほどよろしくお願いいたします。
やりたいこと(条件)
入力値に応じて、テーブルMを検索した結果が
- 1件以上ある場合、テーブルTから入力値に応じたレコードを取得
- 0件の場合、テーブルTから入力値+日付(t_date)が最も新しいレコードを取得
具体例
- id「01」t_char「a」を指定した場合、テーブルTから①②を取得
- id「03」t_char「a」を指定した場合、テーブルTから④を取得
↓テーブル構造など
sql
1--テーブルM 2CREATE TABLE M 3( 4 id VARCHAR(10), 5 t_char VARCHAR(10), 6 PRIMARY KEY (id,t_char) 7); 8INSERT INTO M (id,t_char) VALUES ('01','a'); 9--テーブルT 10CREATE TABLE T 11( 12 id VARCHAR(10), 13 t_char VARCHAR(10), 14 t_2 VARCHAR(10), 15 t_date date, 16 PRIMARY KEY (id,t_char,t_2) 17); 18INSERT INTO T (id,t_char,t_2,t_date) VALUES ('01','a','あ','2022/10/09');--① 19INSERT INTO T (id,t_char,t_2,t_date) VALUES ('01','a','い','2022/10/10');--② 20INSERT INTO T (id,t_char,t_2,t_date) VALUES ('03','a','あ','2022/10/09');--③ 21INSERT INTO T (id,t_char,t_2,t_date) VALUES ('03','a','い','2022/10/10');--④
追記
idやt_charは外部(アプリ側)から入力される想定です。
追記2
ダメもとで下記のようなものを試しましたが、ダメでした。
SELECT
COUNT(*) as c
CASE
WHEN c>1 THEN (SELECT * FROM T WHERE id = '01' AND t_char = 'a')
ELSE 0--todo条件②の条件を指定する
END
FROM M
WHERE
id = '01'
AND
t_char = 'a'

回答2件
あなたの回答
tips
プレビュー