【问题标题】:Postgresql nested SELECTPostgresql 嵌套选择
【发布时间】:2011-10-23 07:56:40
【问题描述】:

我正在学习 postgresql,但我不知道如何编写这个嵌套查询,或者它是否可能。

Table -> Points: pid | val

Table -> Grid: gid | max_val | min_val

Return I want: pid | gid | val

这就是我的想法

for p in (SELECT * FROM Points)
    SELECT gid FROM Grid AS g WHERE p.val < g.max_val AND p.val > g.min_val   

这可能吗?如果是这样,有人可以指出我正确的方向吗?

【问题讨论】:

    标签: sql database postgresql select


    【解决方案1】:

    我认为您不需要嵌套查询,只需加入即可。这样的东西能满足你的需要吗?

    SELECT
      P.pid,
      G.gid,
      P.val
    FROM
      Grid          AS G
    INNER JOIN
      Points        AS P
        ON  P.val < g.max_val
        AND P.Val > g.min_val
    

    【讨论】:

      【解决方案2】:

      即使点的 val 不在任何网格范围内,以下查询也将始终返回点 - 在这种情况下 gid 将为 NULL:

      SELECT
        p.pid,
        g.gid,
        p.val
      FROM
        Points p
        LEFT JOIN Grid g ON g.min_val > p.val AND g.max_val < p.val
      

      如果有多个 Grid 的范围与点的 val 匹配,则查询将为每个 gid 返回两行。

      如果您只想返回匹配任何网格的点,只需添加一个条件:

      WHERE
        g.gid IS NOT NULL
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-24
        • 1970-01-01
        • 2011-05-16
        • 2020-12-07
        • 2019-12-04
        • 1970-01-01
        • 2016-05-22
        • 2010-10-04
        相关资源
        最近更新 更多