2012-04-19 3 views
0

編集:気にしないでください。JOINは2つのテーブルで個別に動作しますが、一緒に使用すると動作しません

PostgreSQL 8.4を使用する。

実行する必要があるクエリの形式は次のとおりです(名前と顔は私のパラノイアを保護するために変更されています)。必要に応じて提供できますが、これはスキーマ、列名は):

SELECT 
    t1.field, 
    SUM(v3.quantity) as current_qty 
FROM 
    schema1.child_table t1 
     JOIN (SELECT DISTINCT t1key FROM schema2.child_transaction t2 WHERE datefield BETWEEN '2012-04-01' AND '2012-04-19') t2 USING (t1key) 
     LEFT JOIN schema1.child_current_status v3 ON t1.t1key = v3.t1key 
     JOIN schema1.parent_table t4 ON t1.t4key = t4.t4key 
WHERE 
    t4.criteria = 763 
GROUP BY 
    t1.field 

...基本的に、私はcriteriaparent_tableに私の提供されたデータと一致した場合にchild_tableからfieldを必要とし、child_transaction内の少なくとも1つの関連するトランザクションが要求された期間内にある場合もございます。 child_current_statusビューに数量がある場合は、それらも必要です。

t1.fieldは、数値キーt4.criteriaと同等の人間が読めると見なすことができます。

私の問題は、そこにデータがある場合でも、提供されたクエリがchild_current_statusからの数量データを提供できないということです。

編集:明確にするには、上記のクエリは、それがfield, current_qty

私はLEFT JOINに、それが関連する量データを返すことに変更した場合ので、問題は、t2サブクエリに関連しているを返す必要がありますfield, NULLを返します:

SELECT 
    t1.field, 
    SUM(v3.quantity) as current_qty 
FROM 
    schema1.child_table t1 
     LEFT JOIN (SELECT DISTINCT t1key FROM schema2.child_transaction t2 WHERE datefield BETWEEN '2012-04-01' AND '2012-04-19') t2 USING (t1key) 
     LEFT JOIN schema1.child_current_status v3 ON t1.t1key = v3.t1key 
     JOIN schema1.parent_table t4 ON t1.t4key = t4.t4key 
WHERE 
    t4.criteria = 763 
GROUP BY 
    t1.field 

編集:この修正されたクエリはfield, current_qtyを返しますが、要求された時間のためのchild_transaction中のトランザクションがあるかどうか、そうだろう期間は

...私が行ったのは、最初のJOINをLEFT JOINにすることで、そのクエリはchild_current_statusに関連する数量で返されます。 child_current_statusをINNER JOINに変更すると、クエリは何も返しません。最初のJOINをLEFT JOINにする問題は、サブクラスから返されたデータがある場合にのみ結果を返す必要があることです。この場合、要求された期間があります。

水域を泥だらけにするには、のために正しく動作します。t4.criteria、763は失敗したものの1つです。

私はここで何が欠けていますか?


ショートバージョンは:最初はINNER JOINをジョイン上記の最初のクエリからは、それはLEFTは何も返さないために、JOINが発生します。 LEFT JOINの場合、LEFT JOINのchild_current_statusは適切なデータを返しますが、最初のJOINの目的は無効になります。

編集:、クエリが正常に動作している内部結合の後ろに、私は変更なし

答えて

0

うわで、LEFTは、FROM句の末尾に登録しよ移動しようとした、用事、私はそれを考え出しましたここに他の誰かがそれを理解するのに十分なデータがありません。基本的には、child_tableに1人の子供に対して1件の取引があり、child_tableには他の子供の現在の数量があります。したがって、クエリは、指定された親に対して指定された時間内にトランザクションがあった子供の現在の数量がないことを適切に示します。

このクエリの結果を処理する際に、すべての子どもに関するデータ(私が持っている必要があるようなもの)ではなく、この質問が(正確に)私には何もなかったと言っても。

ここには何も見えません。

+0

おそらく、ここで見ることがないことを知るためだけに質問につまずくことのないように、あなたの答えを受け入れるようにしてください。 –

+0

StackExchangeは、私が自分の答えを受け入れたことを示すために2日待つ必要があると伝えています。 – Jason

+0

ああ、私は、ごめんなさい。私はいくつかの時間制限があることを知っていた、ちょうど待っている期間が長いことを認識していなかった。 –

関連する問題