where句を使用しながら全レコードを SELECT or 特定レコードのみ SELECT を実現する方法


概要

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 を名前付きでよりわかりやすくすることもできます。