mysql JSON左连接

mysql JSON左连接,mysql,json,Mysql,Json,我需要在表streams上运行LEFT JOIN,并使用streams.server中的第一个索引检索servers.server的值: 例如,我需要左连接以获得此结果: TABLE streams; +----+----------+-------------------------------------------------------------+-------------+-------------+ | id | name | stream

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

例如,我需要左连接以获得此结果:

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         |
+----+-------------------+
因此,关键是从streams.server witch中获取第一个索引为1,然后在servers.id上左键连接以获取servers.server name witch在本例中为Main

我安装了包含JSON支持的mysql 5.7版本,但我不知道如何在JSON字段类型上使用左连接?

示例:

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

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

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;
根据您安装的MySQL的确切版本,您还可以使用
s.server->'$[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;

根据您安装的MySQL的确切版本,您还可以使用
s.server->'$[0]'

我使用上述解决方案使其正常工作:

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

谢谢。

我使用您的上述解决方案使其正常工作:

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

谢谢。

@John。您可能需要摆弄
json\u extract()
。例如,双引号表示json字段中的值存储为字符串,而
服务器中的值看起来像int。@John。您可能需要摆弄
json\u extract()
。例如,双引号表示json字段中的值存储为字符串,而
服务器中的值看起来像int。