首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql对JSON_TABLE值的条件

Mysql对JSON_TABLE值的条件
EN

Stack Overflow用户
提问于 2022-04-29 08:34:20
回答 1查看 151关注 0票数 0

我得到了一个ID列表,作为逗号分隔的JSON值列表,一些示例数据集如下所示: 340596,340597,340595这个列表可能很大,有时是50k ID,由逗号分隔

下面的查询将这些in连接到表主键,并获取表中当前存在的记录

代码语言:javascript
复制
SELECT s.id,s.contactid, s.Quantity FROM 
JSON_TABLE('[340596,340597,340595]', '$[*]' columns (Id int path '$')) AS sm   
LEFT JOIN mastertable s ON s.Id = sm.id  

主程序表可能包含这些ID,也可能是从主程序表中删除的这些记录,因此此查询的目的是确保返回的结果集只包含活动记录。

我必须对这个查询再应用一个筛选,过滤是基于另一个JSON数组,并且需要将它与列ContactID匹配

代码语言:javascript
复制
SELECT s.id,s.contactid, s.Quantity FROM 
JSON_TABLE('[340596,340597,340595]', '$[*]' columns (Id int path '$')) AS sm   
LEFT JOIN mastertable s ON s.Id = sm.id  
WHERE s.ContactId IN (
SELECT cm.id  FROM 
JSON_TABLE('[12345,450597,640595]', '$[*]' columns (Id int path '$')) AS cm  
)

然而,Mysql的性能对大的结果集并不好。我们能用其他更好的方法来代替这个吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-29 08:39:44

您可以在临时表中转储IN子句中的ids,然后将它们与JSON_TABLE连接以获得结果。ALternatively您可以使用CTE并加入相同的。

代码语言:javascript
复制
with temp as (
SELECT cm.id  FROM 
JSON_TABLE('[12345,450597,640595]', '$[*]' columns (Id int path '$')) AS cm  
)
SELECT s.id,s.contactid, s.Quantity FROM 
JSON_TABLE('[340596,340597,340595]', '$[*]' columns (Id int path '$')) AS sm   
LEFT JOIN mastertable s ON s.Id = sm.id
INNER JOIN temp t ON s.ID = t.id;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72055062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档