2016-10-02 5 views
1

私はjsonフィールドにidsのリストを格納しています(これは私が知っているベストプラクティスではありません)、このJSONフィールドでdoオペレーションを使用することができるかどうかを知りたいSQLで。MySQL JSONフィールドを使用してテーブルに結合する

以下は私が達成しようとしている架空の例ですが、このようなものですか?私は私にこのような結果を与えるクエリをファッションしたい上記のデータと

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 

私はまだ見当もつかないのに、私は考えているいくつかの擬似スタイルSQLは、以下の通りですこれが可能である、またはMySQLが提供するものJSON機能私はこの

SELECT 
     u.user_id, 
     u.user_name, 
     g.user_group_id 
     g.group_name 
    FROM users u 
    LEFT JOIN user_group g on g.user_group_id in some_json_function?(u.user_groups) 

を達成するために使用する場合は、問題が明確でない場合は、私に教えてください。 Ferasさんのコメントの助けといくつかのあいで

+1

https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html –

答えて

5

SELECT 
     u.user_id, 
     u.user_name, 
     g.user_group_id 
     g.group_name 
    FROM users u 
    LEFT JOIN user_group g on JSON_CONTAINS(u.user_groups, CAST(g.user_group_id as JSON), '$') 

これは良い方法がありますなら、私に知らせて、動作しているように見えます。

+0

同じことをする必要がありましたが、JSONの特定の値に参加する必要がありました(JSON_EXTRACT(a.json_field、 "$ .json_value"))= b.mysql_value' – b3n

+0

これはどれくらい最適化されていますか? – Murilo

関連する問題