如何基于JSON字符串列与普通VARCHAR列关联两张SQL表?
关联VARCHAR列与JSON字符串列的实现方案
不用临时表的话,直接利用各数据库内置的JSON解析函数提取字段值,再做关联即可,以下是主流数据库的具体实现:
MySQL/MariaDB
可以用JSON_UNQUOTE(JSON_EXTRACT())或者简化的->>运算符提取JSON中的Table1Id值,再与Table1的ID关联:
SELECT t1.*, t2.* FROM Table1 t1 JOIN Table2 t2 ON t1.ID = t2.Log->>'$.Table1Id';
注意:示例中Table2的T2B行JSON键名是
Table1IB(拼写错误),需要修正为Table1Id才能正常关联。
PostgreSQL
将JSON字符串转为json类型后,用->>运算符提取文本值进行关联:
SELECT t1.*, t2.* FROM Table1 t1 JOIN Table2 t2 ON t1.ID = (t2.Log::json)->>'Table1Id';
如果Log列本身是jsonb类型,可省略::json转换:
SELECT t1.*, t2.* FROM Table1 t1 JOIN Table2 t2 ON t1.ID = t2.Log->>'Table1Id';
SQL Server
使用JSON_VALUE()函数提取JSON中的指定字段值:
SELECT t1.*, t2.* FROM Table1 t1 JOIN Table2 t2 ON t1.ID = JSON_VALUE(t2.Log, '$.Table1Id');
额外提示
- 确保JSON字符串格式合法,否则解析函数会返回错误或NULL
- 若数据量较大,这种关联可能无法利用索引,建议考虑将JSON中的
Table1Id字段单独生成计算列并创建索引,提升查询性能
内容的提问来源于stack exchange,提问作者GingerBeered
相关产品推荐
相关产品推荐

