如何解决如何通过MySQL的json整数数组列中的id获取相关项
我的目标是如何获得在json数组中具有对其他引用的列之间的关系。以简化的方式,我有两个表:
table_a
| id | references |
|-----|------------|
| 1 | "[1,3]" |
| 2 | "[2,3]" |
其引用是整数和表b的json数组
table_b
| id | name |
|-----|----------|
| 1 | "item 1" |
| 2 | "item 2" |
| 3 | "item 3" |
因此,我想获取与表A的某项相关的所有表B,其ID为ID,例如1,其ID在列中引用整数数组(如JSON)。
类似这样的东西:
|-----|----------|
| 1 | "item 1" |
| 3 | "item 3" |
我一直在尝试使用docs中的 json_contains , json_extract , json_search 等来实现这一目标,我认为问题在于匹配json整数数组内的值的方式。
例如:
SELECT JSON_SEARCH((select references from table_a where id=1),'one','3');
必须返回某些内容,但始终返回NULL
,但我不理解。我也尝试使用3
不带引号。
??有什么主意吗?
我当前的MysqL版本是5.7.25
谢谢。
要复制的最小代码:
select version();
CREATE TABLE `table_a` (
`id` int(11) NOT NULL,`references` json NULL
);
CREATE TABLE `table_b` (
`id` int(11) NOT NULL,`name` text NULL
);
INSERT INTO `table_a` (`id`,`references`) VALUES
(1,'\"[1,3]\"'),(2,'\"[2,3]\"');
INSERT INTO `table_b` (`id`,`name`) VALUES
(1,'item_1'),'item_2'),(3,'item_3');
SELECT * from table_a;
SELECT * from table_b;
select `references` from table_a where id=1;
SELECT JSON_SEARCH((select `references` from table_a where id=1),'3');
要测试的沙盒:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=ac557666852fa94e77fdf87158c9abe0
解决方法
不正确(但已通过JSON_VALID函数成功检查)的JSON。
解决方案太可怕了
SELECT table_b.*
FROM table_a,table_b
WHERE table_a.id = 1
AND JSON_SEARCH(REPLACE(REPLACE(REPLACE(REPLACE(table_a.references,'"',''),'[','["'),']','"]'),','","'),'one',table_b.id) IS NOT NULL
fiddle和一些其他查询来解释问题。
,您可以使用下一个查询作为解决方案:
select
table_a.*,table_b.*
from table_a
join table_b on JSON_CONTAINS(
CAST(TRIM('"' FROM `references`) as JSON),CAST(table_b.id as JSON)
)
where table_a.id=2;
由于您的references
字段不是有效的JSON类型,因此您需要将其转换为JSON,然后可以使用JSON_CONTAINS函数。
尝试here
,您可以先删除使用引号包裹数组的引号,然后将结果整数与import { MatIconModule } from '@angular/material/icon'
子字符串连接在一起,并使用辅助子查询(其中一个生成行)以连续获取数组的每个成员,例如
item_
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。