从JSON文本字段中提取值以用于“IN”语句SQL

nuypyhwy  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(169)

在Azure SQL服务器中,我有以下(非功能性)查询,它试图使用JSON外键数组中的值来查找行,使用“IN”。

SELECT * FROM foo_table WHERE foo_table_id IN (SELECT json_ids_field FROM bar_table WHERE bar_table_id _field= 1);

但是,这会返回一个错误,因为它本身并不理解json_ids_field中的JSON格式。

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '[29,56,57,71,138,145,195]' to data type int

如何反序列化此字段,以便将其值聚合到可在IN子句中使用的列表中。

huwehgph

huwehgph1#

正如评论中提到的,您需要使用OPENJSON来使用JSON并将其转换为数据集:

SELECT *
FROM dbo.foo_table
WHERE foo_table_id IN (SELECT TRY_CONVERT(int, OJ.value)
                       FROM dbo.bar_table bt
                            CROSS APPLY OPENJSON(bt.json_ids_column) OJ
                       WHERE bt.bar_table_id_column = 1);

相关问题