複雑なテーブル結合に MySQL JSON フィールドを使用する
問題:
MySQL データベース内スキーマでは、JSON フィールドに ID のリストが保存されます。目標は、この JSON フィールドで操作を実行し、その結果を SQL クエリで使用してユーザー テーブルとユーザー グループ テーブルを結合することです。
シナリオ例:
次のテーブルについて考えてみましょう:
CREATE TABLE user ( user_id INT, user_name VARCHAR(50), user_groups JSON ); CREATE TABLE user_group ( user_group_id INT, group_name VARCHAR(50) );
次のデータ:
INSERT INTO user_group (user_group_id, group_name) VALUES (1, 'Group A'); INSERT INTO user_group (user_group_id, group_name) VALUES (2, 'Group B'); INSERT INTO user_group (user_group_id, group_name) VALUES (3, 'Group C'); INSERT INTO user (user_id, user_name, user_groups) VALUES (101, 'John', '[1,3]');
望ましい結果:
望ましい結果は、次のクエリです。次のデータを取得します:
user_id | user_name | user_group_id | group_name| ------------------------------------------------- 101 | John | 1 | Group A 101 | John | 3 | Group C
解決策:
この解決策には、JSON_CONTAINS 関数を使用して、ユーザーの JSON フィールド内にユーザー グループ ID が存在するかどうかを確認することが含まれます。 table.
<code class="sql">SELECT u.user_id, u.user_name, g.user_group_id, g.group_name FROM user u LEFT JOIN user_group g on JSON_CONTAINS(u.user_groups, CAST(g.user_group_id as JSON), '$')</code>
注:
JSON_CONTAINS 関数の $ 演算子は、JSON ドキュメントのルートを表します。
以上がJSON フィールド内のデータに基づいて MySQL テーブルを結合するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。