SQLのアクションで前のクエリの結果を使用する
ベースマキナのSQL系のデータソース(MySQL、PostgreSQL)では、複数のクエリを登録して順番に実行できます。
この機能を使う際に、前のクエリの結果を次のクエリで使用できます。
ここでは、次のように指定のメールアドレスのユーザー情報を取得してから、取得したユーザーIDを使用してユーザーの決済情報を無効化するクエリを実行する例を紹介します。
-- 指定したメールアドレスのユーザーIDを取得する
SELECT id FROM users WHERE email = {{ email }} LIMIT 1;
-- 取得したユーザーIDを使用してユーザーの決済情報を無効化する
DELETE FROM payment_settings WHERE user_id = (取得したユーザーID);
変数を利用する方法(MySQLのみ)
変数を定義して、取得したユーザーIDを格納し、その変数を次のクエリで使用する方法です。
まず最初のクエリで変数を定義します。
SET @userId = '';
次に、指定のメールアドレスのユーザー情報を取得して、取得したユーザーIDを変数に格納します。
SELECT id INTO @userId FROM users WHERE email = {{ email }} LIMIT 1;
最後に、取得したユーザーIDを使用してユーザーの決済情報を無効化するクエリを実行します。
このクエリだけ「書き込み」の種類のクエリとして登録します。
DELETE FROM payment_settings WHERE user_id = @userId;
以上のように、@
を付けた変数を定義することで、前のクエリの結果を次のクエリで使用できます。
最終的な設定は次の画像のようになります。
なお、ベースマキナのSQL系のアクションは、複数のクエリを登録していても1つのセッション内で処理されます。
したがって一度変数に格納した値は、後続のクエリのいずれでも使用できます。
一時テーブルを使う方法(MySQL / PostgreSQL)
一時テーブルを定義して、取得したユーザーIDを格納し、その一時テーブルのレコードを次のクエリで使用する方法です。
指定のメールアドレスのユーザー情報を取得して、取得したユーザーIDを一時テーブルに格納します。
CREATE TEMPORARY TABLE temp_user AS SELECT id FROM users WHERE email = {{ email }} LIMIT 1;
そして、取得したユーザーIDを使用してユーザーの決済情報を無効化するクエリを実行します。
このクエリだけ「書き込み」の種類のクエリとして登録します。
DELETE FROM payment_settings WHERE user_id = (SELECT id FROM temp_user);
以上のように、CREATE TEMPORARY TABLE
を使って一時テーブルを定義することで、前のクエリの結果を次のクエリで使用できます。
最終的な設定は次の画像のようになります。
なお、ベースマキナのSQL系のアクションは、複数のクエリを登録していても1つのセッション内で処理されます。
したがって一時テーブルに格納した値は、後続のクエリのいずれでも使用できます。
一時テーブルはセッションが終了すると自動的に削除されます。