2016-10-02 2 views
1

У меня есть поле json, в котором хранится список идентификаторов (не самая лучшая практика, которую я знаю), я хочу знать, можно ли использовать операции do в этом поле JSON и использовать их в 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 table b на JSON_EXTROTE (JSON_EXTRACT (a.json_field," $ .json_value ")) = b.mysql_value' – b3n

+0

Насколько это оптимизировано? – Murilo

 Смежные вопросы

  • Нет связанных вопросов^_^