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