Postgresql如何使用IN进行多列文本匹配

问题描述 投票:1回答:3
SELECT * FROM user_follow WHERE (post, "user", type, following)
IN ((25, 1, 'pc' || 'pl' || 'pf', true), (25, 2, 'pc' || 'cc'|| 'cl', true))

在第三列中,我想匹配'pc','pl','pf'。我不相信我使用正确的语法,因为我没有得到任何结果,我也尝试使用OR而不是||但它也行不通。这样做的正确方法是什么?

我仍然需要符合内括号中的确切要求的多个IN查询

sql postgresql
3个回答
0
投票

||确实串联连接。

它看起来像你想要的

SELECT * FROM user_follow
WHERE post=25
AND (
    ("user" = 1 AND type IN ('pc', 'pl', 'pf'))
    OR ("user" = 2 AND type IN ('pc', 'cc', 'cl'))
)
AND following=true

您还可以定义可能的组合,如下所示:

with params(u, t) as values (
    (1, array['pc', 'pl', 'pf']),
    (2, array['pc', 'cc', 'cl'])
)
select "user".* from "user", params
where post=25
and "user"=u
and type=any(t)
and following=true

0
投票

好吧,你总是可以使用普通的逻辑运算符重写它,就像这样......

SELECT
    *
FROM
    user_follow
WHERE
    (
        post = 25,
        AND "user" = 1
        AND type IN ('pc', 'pl', 'pf')
        AND = true
    )
    OR (
        post = 25,
        AND "user" = 2
        AND type IN ('pc', 'cc', 'cl')
        AND = true
    )

0
投票

你可以查询如下:

SELECT *
  FROM user_follow
 WHERE ("user" IN ('pc', 'pl', 'pf') AND (post, type, following) IN ((25, 1, true)
     OR "user" IN ('pc', 'cc', 'cl') AND (post, type, following) IN ((25, 2, true));

如果它符合您的要求,请告诉我。

谢谢,Idrees

© www.soinside.com 2019 - 2024. All rights reserved.