gpt4 book ai didi

postgresql - 根据值的元组过滤 Postgres 表

转载 作者:行者123 更新时间:2023-11-29 12:41:31 27 4
gpt4 key购买 nike

想象一下 Postgres 中的一个表:

Firstname     Surname      Age
------------------------------
Joe Bloggs 5
Sam Bloggs 7
Ellie Jones 4
Mike Smith 10

我想根据值对(元组)的数组对其进行范围过滤:

{Surname=Bloggs  &&   Age>=6 },
{Surname=Smith && Age>=10}

返回:

Firstname     Surname      Age
------------------------------
Sam Bloggs 7
Mike Smith 10

我意识到我可以通过像这样手动执行 SQL 语句来做到这一点:

SELECT * FROM MyTable t
WHERE (t.Surname = 'Bloggs' AND t.Age >= 6 )
OR (t.Surname = 'Smith' AND t.Age >= 10)

但是,我需要从 C# 调用它,并且我对避免为每个查询生成纯文本 SQL 语句的解决方案很感兴趣。

是否可以使用“通用”SQL 语句来执行此操作,将某种元组/复合类型数组作为过滤器参数传递?

例如,在其他 RDBMS 中,我可以用值对填充一个临时表,然后加入该表;或使用表值参数(在 SQL Server 中)。 Postgres + NpgSql 中有等效项吗?

PS:我读了this question为此使用临时表可能不是 Postgres 中的最佳实践

最佳答案

我认为传递类似于表值参数的东西的灵活方法是使用 JSON 传递用于条件的元组数组:

select t.*
from mytable t
join json_array_elements('[{"surname": "Bloggs", "age": 6},
{"surname": "Smith", "age": 10}]') x
on (x ->> 'surname') = t.surname and t.age >= (x ->> 'age')::int;

在您的应用程序中,您可以将 JSON 作为字符串传递。不确定如何在 NpPgSQL 中传递参数,在以下示例中 ? 是参数占位符:

select t.*
from mytable t
join json_array_elements(cast(? as json)) x
on (x ->> 'surname') = t.surname
and t.age >= (x ->> 'age')::int;

关于postgresql - 根据值的元组过滤 Postgres 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48205039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com