LoginSignup
0
0

More than 1 year has passed since last update.

SQLでVALUESを使ってJOINやEXISTSをする

Last updated at Posted at 2022-09-27

はじめに

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      |
+----+---------+---------+

最後に

使えそうな状況はパッとは浮かびませんが、意外とスッキリかけて良い気がしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0