mysql JSON LEFT JOIN

时间:2017-02-11 15:34:00

标签: mysql json

TABLE streams;

+----+----------+-------------------------------------------------------------+-------------+-------------+
| id | name     | stream                                                      | server      | bouquet     | 
+----+----------+-------------------------------------------------------------+-------------+-------------+
|  1 | HOME     | ["http://ur11.com/", "http://ur12.com/"]                    | ["1", "3"]  | ["3","2"]   |
+----+----------+-------------------------------------------------------------+-------------+-------------+

TABLE servers;

+----+-------------------+
| id | server            |
+----+-------------------+
|  1 | Main              |
|  2 | Server #1         |
|  3 | Server #2         |
|  4 | Server #3         |
|  5 | Server #4         |
+----+-------------------+

我需要在表流上运行LEFT JOIN并使用streams.server中的第一个索引检索server.server:

例如,我需要左连接才能得到这个结果:

+----+----------+-------------------------------------------------------------+-------------+-------------+
| id | name     | stream                                                      | server      | bouquet     | 
+----+----------+-------------------------------------------------------------+-------------+-------------+
|  1 | HOME     | ["http://ur11.com/", "http://ur12.com/"]                    | Main        | ["3","2"]   |
+----+----------+-------------------------------------------------------------+-------------+-------------+

所以重点是从streams.server获取第一个索引,女巫为1,然后在servers.id上获取LEFT JOIN以获取服务器。服务器名称女巫就此而言主要

我安装了mysql 5.7版本女巫包含JSON支持,但我没有得到如何在JSON字段类型上使用LEFT JOIN的线索?

3 个答案:

答案 0 :(得分:1)

我想你想要:

DocumentCompleted

根据您安装的MySQL的确切版本,您还可以使用select s.*, se.server from streams s join servers se on se.id = json_extract(s.server, '$[0]');

答案 1 :(得分:1)

我使用您的上述解决方案得到了它:

select s.*, se.server
from streams s left join
servers se
on se.id = CAST(json_extract(s.server, '$[0]') AS UNSIGNED);

感谢。

答案 2 :(得分:0)

示例:

SELECT *
FROM foo 
CROSS JOIN LATERAL json_array_elements (foo.bars :: json) foo_bars 
LEFT OUTER JOIN bar ON (foo_bars ->> 'id') :: BIGINT = bar.ID;

Link