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 }} )