はじめに
valuesはinsertでしか使ってきませんでしたが、selectとかupdateとかでも普通に使えるみたいなので、書き残しメモ。
UNION ALL で固定値つなげれば同じことができるのは知っていましたが、、、
確認環境
PostgreSQL 14.0
※他のDB環境でも可能かと
前提条件
以下のような test_data テーブルがあるとします
select * from test_data;
+----+---------+---------+
| id | colom_A | colom_B |
+----+---------+---------+
| 1 | 001 | A1 |
| 2 | 002 | A2 |
| 3 | 003 | A3 |
| 4 | 001 | B1 |
| 5 | 002 | B2 |
+----+---------+---------+
JOINの例
SELECT td.*
FROM test_data td
JOIN(
VALUES
('001', 'A1'),
('002', 'B2')
) AS temp_values(colom_A, colom_B)
ON td.colom_A = temp_values.colom_A
AND td.colom_B = temp_values.colom_B;
+----+---------+---------+
| id | colom_A | colom_B |
+----+---------+---------+
| 1 | 001 | A1 |
| 5 | 002 | B2 |
+----+---------+---------+
(NOT) EXISTSの例
SELECT td.*
FROM test_data td
WHERE NOT EXISTS(
SELECT 'X' FROM
(VALUES
('001', 'A1'),
('002', 'B2')
) AS temp_values(colom_A, colom_B)
WHERE td.colom_A = temp_values.colom_A
AND td.colom_B = temp_values.colom_B
);
+----+---------+---------+
| id | colom_A | colom_B |
+----+---------+---------+
| 2 | 002 | A2 |
| 3 | 003 | A3 |
| 4 | 001 | B1 |
+----+---------+---------+
最後に
使えそうな状況はパッとは浮かびませんが、意外とスッキリかけて良い気がしています。