加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将“WHERE”参数传递到PostgreSQL视图?

发布时间:2020-12-13 16:43:31 所属栏目:百科 来源:网络整理
导读:我有一个相当复杂的查询,我的PostgreSQL数据库通过一系列嵌套的子查询跨越4个表。然而,尽管有些微妙的外观和设置,最终它将基于两个外部参数(两个字符串需要与不同表中的字段匹配)返回两列(来自同一个表,如果这有助于情况)。我对PostgreSQL的数据库设计相
我有一个相当复杂的查询,我的PostgreSQL数据库通过一系列嵌套的子查询跨越4个表。然而,尽管有些微妙的外观和设置,最终它将基于两个外部参数(两个字符串需要与不同表中的字段匹配)返回两列(来自同一个表,如果这有助于情况)。我对PostgreSQL的数据库设计相当新,所以我知道这个看似神奇的东西叫视图存在,似乎它可以帮助我在这里,但也许不是。

有一些方法,我可以移动我的复杂查询在一个视图,不知何故只是传递它我需要匹配的两个值?这将大大简化我的前端代码(通过将复杂性移到数据库结构)。我可以创建一个视图,它包装我的静态示例查询,并且工作正常,但是只适用于一对字符串值。我需要能够使用它与各种不同的价值观。

因此我的问题是:是否可能传递参数到一个否则静态视图,并使其成为“动态”?或者一个视图不是正确的方法。如果还有其他东西会更好,我都耳朵!

*编辑:*根据评论中的要求,这是我的查询,因为它现在:

SELECT   param_label,param_graphics_label
  FROM   parameters
 WHERE   param_id IN 
         (SELECT param_id 
            FROM parameter_links
           WHERE region_id = 
                 (SELECT region_id
                    FROM regions
                   WHERE region_label = '%PARAMETER 1%' AND model_id =
                         (SELECT model_id FROM models WHERE model_label = '%PARAMETER 2%')
                 )
         ) AND active = 'TRUE'
ORDER BY param_graphics_label;

参数由上面的百分比符号表示。

你可以使用set returns函数:
create or replace function label_params(parm1 text,parm2 text)
  returns table (param_label text,param_graphics_label text)
as
$body$
  select ...
  WHERE region_label = $1 
     AND model_id = (SELECT model_id FROM models WHERE model_label = $2)
  ....
$body$
language sql;

然后你可以做:

select *
from label_params('foo','bar')

Btw:你确定你想要:

AND model_id = (SELECT model_id FROM models WHERE model_label = $2)

如果model_label不是唯一的(或主键),那么这将最终抛出一个错误。你可能想要:

AND model_id IN (SELECT model_id FROM models WHERE model_label = $2)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读