我有一個查詢,我已經簡化了一點:在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查詢中聲明一個變量並重用它?
在PDO中,您只能使用一次參數,所以我必須多次通過1337。我沒有嘗試交叉連接,這可能是一個體面的方法 – MrGlass