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的线索?
答案 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;