MariaDBでJSON_CONTAINS関数を使って配列値を検索する
MariaDBでWHERE条件と配列値を使用する
使用例
IN演算子
SELECT * FROM テーブル名
WHERE 列名 IN (値1, 値2, ...);
この例では、列名
が値1
、値2
、... のいずれかに一致するすべての行が選択されます。
例:
SELECT * FROM 商品
WHERE 価格 IN (1000, 2000, 3000);
このクエリは、価格が1000円、2000円、3000円の商品をすべて選択します。
FIND_IN_SET関数
SELECT * FROM テーブル名
WHERE FIND_IN_SET(値, 列名) > 0;
この例では、列名
に値
が含まれているすべての行が選択されます。
SELECT * FROM 顧客
WHERE FIND_IN_SET('東京', 都道府県) > 0;
このクエリは、都道府県が東京の顧客をすべて選択します。
JSON_CONTAINS関数
SELECT * FROM テーブル名
WHERE JSON_CONTAINS(列名, JSON_QUOTE(値));
SELECT * FROM 設定
WHERE JSON_CONTAINS(設定内容, JSON_QUOTE('{"言語": "日本語"}'));
このクエリは、設定内容に言語が日本語と設定されている設定をすべて選択します。
注意点
- IN演算子とFIND_IN_SET関数は、値の順序が重要ではありません。
- JSON_CONTAINS関数は、値の順序は重要ではありませんが、JSON形式で保存されている必要があります。
- 配列の要素に空白文字が含まれている場合は、シングルクォーテーションで囲む必要があります。
MariaDBでWHERE条件と配列値を使用して、テーブルからデータを取得する方法をいくつか紹介しました。 どの方法を使用するかは、データの形式や検索条件によって異なります。
IN演算子
# 商品テーブルから、価格が1000円、2000円、3000円の商品をすべて選択
SELECT * FROM 商品
WHERE 価格 IN (1000, 2000, 3000);
FIND_IN_SET関数
# 顧客テーブルから、都道府県が東京、大阪、京都の顧客をすべて選択
SELECT * FROM 顧客
WHERE FIND_IN_SET(都道府県, '東京,大阪,京都') > 0;
JSON_CONTAINS関数
# 設定テーブルから、設定内容に言語が日本語と英語の両方を含む設定をすべて選択
SELECT * FROM 設定
WHERE JSON_CONTAINS(設定内容, JSON_QUOTE('{"言語": ["日本語", "英語"]}')
# 商品テーブルから、名前が"A B"と"C D"の商品をすべて選択
SELECT * FROM 商品
WHERE 名前 IN ('A B', 'C D');
- 配列の要素が変数に格納されている場合は、その変数を使用することができます。
# 商品テーブルから、価格が$prices配列に含まれる商品をすべて選択
$prices = [1000, 2000, 3000];
SELECT * FROM 商品
WHERE 価格 IN ($prices);
MariaDBでWHERE条件と配列値を使用するその他の方法
CASE式
SELECT * FROM テーブル名
WHERE CASE
WHEN 列名 = 値1 THEN TRUE
WHEN 列名 = 値2 THEN TRUE
...
END;
SELECT * FROM 商品
WHERE CASE
WHEN 価格 = 1000 THEN TRUE
WHEN 価格 = 2000 THEN TRUE
WHEN 価格 = 3000 THEN TRUE
END;
EXISTS子クエリ
SELECT * FROM テーブル名
WHERE EXISTS (
SELECT * FROM サブテーブル名
WHERE サブテーブル名.列名 = テーブル名.列名
AND サブテーブル名.列名 IN (値1, 値2, ...)
);
SELECT * FROM 商品
WHERE EXISTS (
SELECT * FROM 商品カテゴリ
WHERE 商品カテゴリ.商品ID = 商品.商品ID
AND 商品カテゴリ.カテゴリID IN (1, 2, 3)
);
このクエリは、カテゴリIDが1、2、3の商品をすべて選択します。
JOIN
SELECT *
FROM テーブル名1
JOIN テーブル名2 ON テーブル名1.列名 = テーブル名2.列名
WHERE テーブル名2.列名 IN (値1, 値2, ...);
SELECT *
FROM 商品
JOIN 商品カテゴリ ON 商品.商品ID = 商品カテゴリ.商品ID
WHERE 商品カテゴリ.カテゴリID IN (1, 2, 3);
mariadb