在PGSQL查询中重用变量

格拉斯先生

我有一个查询,将其简化为:

WITH users AS (
    SELECT member_id FROM group_members AS gm 
        JOIN groups AS g on gm.group_id = g.id 
        WHERE g.id = 1337 OR g.parents @> ARRAY[1337]
    )
UPDATE access SET revoked = TRUE 
    WHERE user_id IN (SELECT member_id FROM users)

RETURNING user_id;

这可行,但是我必须多次输入该id值(1337)。在我的抽象示例中,这并不是很糟糕,但是对于更复杂的现实世界查询而言,这确实很丑陋,而且由于我使用的是PHP / PDO,因此必须多次传递相同的变量。

我要寻找的是一些技巧,一次声明我的变量,然后重新使用它,例如:

DECLARE gid = 1337
WITH users AS (
    SELECT member_id FROM group_members AS gm 
        JOIN groups AS g on gm.group_id = g.id 
        WHERE g.id = gid OR g.parents @> ARRAY[gid]
    )
UPDATE access SET revoked = TRUE 
    WHERE user_id IN (SELECT member_id FROM users)

RETURNING user_id;

但是显然那是行不通的。

有没有一种方法可以在pgsql查询中声明一次变量并重用它?

克洛多尔多·内托
with gid as (
    select 1337 as gid
), users as (
    select member_id
    from
        group_members as gm 
        join
        groups as g on gm.group_id = g.id 
    where
        g.id = (select gid from gid) or
        g.parents @> array[(select gid from gid)]
)
update access
set revoked = true 
where user_id in (select member_id from users)

或如果子查询太丑则进行交叉联接

with gid as (
    select 1337 as gid
), users as (
    select member_id
    from
        group_members as gm 
        join
        groups as g on gm.group_id = g.id
        cross join
        gid
    where g.id = gid or g.parents @> array[gid]
)
update access
set revoked = true 
where user_id in (select member_id from users)

但是,如果您要从PHP传递参数,那么我看不到仅将参数持有人放在 1337

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PGSQL查询中的参数传递

来自分类Dev

如何在PL / pgSQL中的动态选择查询上使用迭代器变量?

来自分类Dev

如何将插入查询返回的值分配给 PL/pgSQL 中的变量

来自分类Dev

在LINQ中重用输入变量

来自分类Dev

长查询中的%s字符串格式,其中多个变量被重用

来自分类Dev

在PL / pgSQL中动态执行查询

来自分类Dev

Cypher-索引查询中的重用节点

来自分类Dev

不要在LINQPad中重用查询过程

来自分类Dev

在Django中重用filter()查询集

来自分类Dev

Cypher-索引查询中的重用节点

来自分类Dev

子查询中的SQL Server重用别名

来自分类Dev

将插入的输出的值存储。_ID到本地变量以在另一个查询中重用

来自分类Dev

重用CUDA中的事件变量是否“值得”?

来自分类Dev

如何在Terraform中重用变量* definitions *?

来自分类Dev

是否可以在LESS文件中重用变量?

来自分类Dev

关于python中的csv文件重用变量

来自分类Dev

重用开关/案例中的变量存储值

来自分类Dev

在 React 类中声明和重用变量?

来自分类Dev

在Sqlite中的以下查询中重用SQL查询的结果

来自分类Dev

在Sqlite中的以下查询中重用SQL查询的结果

来自分类Dev

重用变量

来自分类Dev

如何在选择查询中将变量重用作表名

来自分类Dev

简化/重用此 SQL 查询中的子查询

来自分类Dev

当重用次数不是主查询中列的完整列表时,如何重用子查询?

来自分类Dev

查询中的PyMySQL变量

来自分类Dev

查询中的sed变量?

来自分类Dev

mysqli查询中的变量

来自分类Dev

SQL 查询中的变量

来自分类Dev

PostgreSQL PL/pgSQL :查询存储在表中(开放时间)