使用IN子句扩展JSON时返回的所有记录

时间:2019-05-20 14:22:22

标签: postgresql

我使用JSON传递ID列表,但是以下查询始终返回所有记录。

select first_name
from app.users
where id in (
    select id::varchar::bigint
    from json_array_elements('[9497902]'::json) id
);

使用ID手动替换JSON将带回预期的记录量:

select first_name
from app.users
where id in (
    9497902
);

我缺少能够与JSON ID一起使用的东西吗?

1 个答案:

答案 0 :(得分:0)

demo: db<>fiddle

select name
from users
where id in (
    select id.value::varchar::bigint
    from json_array_elements('[1,3]'::json) id
);

子查询中使用的名称id已从外部查询转移到内部查询中。可以通过执行以下查询来检查:

select name
from users
where id in (
    select id
);

您的JSON函数的别名为id,但这是结果集的名称,而不是该列的名称。该函数的默认列名称为value。因此正确地,您必须使用SELECT id.value...或简单地使用SELECT value来引用正确的值。