You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何通过存储为[id, anotherId]格式的字段关联对应关联表

问题原因

你当前写法不生效的核心原因是:SUBSTRING处理后返回的是单个完整字符串(例如处理["1110663703","1958153258"]后得到"1110663703","1958153258"),而IN运算符需要的是独立的多个值集合,把单个字符串作为IN的参数自然匹配不到任何id,所以返回0行。

解决方案

以下分不同数据库场景给出可直接运行的方案:

方案1:JSON函数方案(推荐,适配绝大多数主流数据库)

你存储的related_table_ids本身就是标准JSON数组格式,用数据库自带的JSON函数处理性能最高、准确性最好:

  • MySQL 5.7及以上版本写法:
SELECT t.*, rt.*
FROM `table` t
INNER JOIN related_table rt 
ON JSON_CONTAINS(t.related_table_ids, JSON_QUOTE(rt.id));
  • PostgreSQL写法:
SELECT t.*, rt.*
FROM "table" t
INNER JOIN related_table rt 
ON rt.id::TEXT = ANY(jsonb_array_elements_text(t.related_table_ids::jsonb));

方案2:字符串匹配兼容方案(适配所有数据库)

如果你的数据库版本过低不支持JSON函数,可以用字符串模糊匹配实现:

SELECT t.*, rt.*
FROM `table` t
INNER JOIN related_table rt 
ON t.related_table_ids LIKE CONCAT('%"', rt.id, '"%');

注意:该方案只要你的id是纯数字、无特殊重合字符,就不会出现误匹配问题。

内容的提问来源于stack exchange,提问作者Rykers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:45:04