代码之家  ›  专栏  ›  技术社区  ›  forJ

Postgresql如何在中用于多列文本匹配

  •  1
  • forJ  · 技术社区  · 6 年前
    SELECT * FROM user_follow WHERE (post, "user", type, following)
    IN ((25, 1, 'pc' || 'pl' || 'pf', true), (25, 2, 'pc' || 'cc'|| 'cl', true))
    

    我还需要倍数 IN 与内括号中的确切要求匹配的查询

    3 回复  |  直到 6 年前
        1
  •  0
  •   Denys Séguret    6 年前

    || 进行字符串连接。

    看起来你想要

    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
    
        2
  •  0
  •   Branko Dimitrijevic    6 年前

    好吧,你可以用简单的逻辑运算符重写它,就像这样。。。

    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
        )
    
        3
  •  0
  •   ihm017    6 年前

    您可以如下查询:

    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));
    

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

    谢谢, 印尼盾