2011-08-09 11 views
2

私はpostgresqlを学んでいます。このネストされたクエリを書く方法や、それが可能なのかどうかはわかりません。PostgreSQLネストされたSELECT

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

ネストされたクエリが必要ではないと思います。このようなものはあなたが必要とするものを与えますか?

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

クエリは常にポイントの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 

ポイントのvalと一致すると、クエリは各gidに対して2つの行を返します。

あなたが任意のグリッドに一致する点のみを返すようにしたい場合は、単に条件を追加:

WHERE 
    g.gid IS NOT NULL 
関連する問題