Postgresql вложенный SELECT - PullRequest
       15

Postgresql вложенный SELECT

2 голосов
/ 09 августа 2011

Я изучаю 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   

Возможно ли это? Если так, может кто-нибудь направить меня в правильном направлении?

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Не думаю, что вам нужен вложенный запрос, просто соединение. Что-то подобное дает то, что вам нужно?

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
1 голос
/ 09 августа 2011

Следующий запрос всегда будет возвращать точку, даже если значение точки не находится ни в каком диапазоне сетки - в этом случае значение 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

Если существует несколько сеток с диапазоном, который будет соответствовать значению точки, запрос возвратит две строки для каждого gid.

Если вы хотите вернуть только точки, соответствующие любой сетке, просто добавьте условие:

WHERE
  g.gid IS NOT NULL
...