2016-10-02 41 views
1

我有一個存儲id列表的json字段(我不知道這裏是否是最佳做法),我想知道是否可以在此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我想低於,但我仍然沒有線索這是可能的,或者是JSON功能MySQL提供我會使用這個實現

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) 

讓我知道,如果這個問題不明確。

+1

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

回答

5

隨着Feras的評論的幫助和一些擺弄:

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中的特定值字段和以下爲我工作 'LEFT JOIN表B在JSON_UNQUOTE(JSON_EXTRACT(a.json_field,「$ .json_value」))= b.mysql_value' – b3n

+0

這是如何優化? – Murilo