SQLチートシート
SQLクエリーで配列を使用するにはどうすればよいですか?
SQLデータベースごとに配列の扱い方は少し異なります。以下に、一般的なデータベースのいくつかについてベストプラクティスを示します。
select
*
from
users
where id = ANY({{ [1, 2, 3] }})
SELECT
*
FROM
users
WHERE
id IN (
SELECT
convert(int, value)
FROM
string_split({{ [1, 2, 3] }}, ',')
)
SELECT
*
FROM
users
WHERE
id IN (
SELECT
Split.a.value('.', 'NVARCHAR(MAX)') DATA
FROM
(
SELECT
CAST(
'<X>' + REPLACE({{ [1,2,3,4,5,5,6].join(',') }}, ',', '</X><X>') + '</X>' AS XML
) AS String
) AS A
CROSS APPLY String.nodes('/X') AS Split(a)
)
select
*
from
users
where
id IN ({{ [1, 2, 3] }})
select
*
from
users
where id IN UNNEST({{ [1, 2, 3] }})
select
*
from
users
where
id IN ({{ [1, 2, 3].join() }})
SELECT
*
FROM
c --c is the container ID input in the query editor UI
WHERE
array_contains( {{ [1,2,3] }}, c.id )
他のデータベース
LIKE
キーワードとワイルドカードをサポートしているSQLデータベースでこれを行うには、SQLの%
ワイルドカード演算子、および文字列連結演算子||
を利用するという方法があります。
select
*
from
users
where
{{ 'george,fred,chris' }} like '%' || users.name || '%'
フィルターを使用していない場合に自分のデータをすべて表示するにはどうすればよいですか?
一般的なユース・ケースは、ステータスを基準にユーザーをフィルタリングできるドロップダウンの使用です。ただし、ステータスを選択していないときにすべてのステータスが表示されるようにする場合は、以下のパターンを使用する必要があります。
select
*
from
users
where
( {{ !select1.value }} OR users.status = {{ select1.value }} )
select
*
from
users
where
( {{!select1.value ? 1 : 0}} = 1 OR users.status = {{ select1.value }} )
Updated about 4 years ago