概要
Redash 等のセレクトボックスで ID1 を選択したらそのIDのレコードを、ALL を選択したらフィルタリングせずに全レコードを取得したいときがあります。
そこで SQL で WHERE id =
に 1 を記載したら id 1 のレコードを取得、ALL のようなものを記載したら全レコードを取得をする方法を考えてみました。
やり方
※ 対象テーブルが文字列のユニーク識別子を持っていることが前提条件となります。
=> CAST 関数を使って STRING に変換すれば id カラムでもできますね
LIKE
を使用して個別取得したいときは該当レコードのユニークIDを指定、全取得したいときはすべての文字列にマッチするようにワイルドカードを指定することで実現できます。
個別選択:
WHERE unique_code_column LIKE "code1234"
全選択:
WHERE unique_code_column LIKE "%_%"
下記は Big Query × Redash の例です
WITH users AS(
SELECT '田中' as name, 's9nicadgu3' as uid
UNION ALL
SELECT '佐々木' as name, 'p9f2igt4k5' as uid
UNION ALL
SELECT '佐藤' as name, 'tztrg8ibra' as uid
)
SELECT
*
FROM
users
WHERE uid LIKE {{ uid }}
## Dropdown List uid
"%_%"
"s9nicadgu3"
"p9f2igt4k5"
"tztrg8ibra"
Query Based Dropdown List を使用し、 uid を名前付きでよりわかりやすくすることもできます。