0

データベース: PostgreSQL

私が持っているとしましょう

table A(integer a_id, timestamp x, timestamp y) 
table B(int b_id, timestamp n, timestamp m)

mすることができますnull

この構造でデータを取得したい

SELECT a_id, j.b_id, k.b_id 
FROM A, B AS j, B AS k 
WHERE (x BETWEEN j.n AND j.m) AND (y BETWEEN k.n AND k.m.)

(x BETWEEN j.n AND j.m) AND (y BETWEEN k.n AND k.m.)の一致が見つからない場合

null j.b_idまたはを使用してクエリでデータを取得したいnull k.b_id

それ、どうやったら出来るの?

4

2 に答える 2

1

外部結合を使用し、NULL を因数分解します。

SELECT a_id, j.b_id, k.b_id 
FROM A
LEFT JOIN B AS j ON x >= j.n AND (x <= j.m OR j.m IS NULL)
LEFT JOIN B AS k ON y >= k.n AND (y <= k.m OR k.m IS NULL) 
于 2013-01-26T20:02:57.450 に答える
1

不可解な質問の私の解釈...

SELECT a_id, j.b_id, k.b_id 
FROM   a
LEFT   JOIN b j ON a.x BETWEEN j.n AND j.m
LEFT   JOIN b k ON a.y BETWEEN k.n AND k.m

または に一致する行が見つからない場合は、それぞれ またはjk配信NULLされます。j.b_idk.b_id

クエリには、複数の一致があるbと返される行数が増えるという主な設計上の欠陥がありますCROSS JOIN

于 2013-01-26T20:13:32.513 に答える