編集:気にしないでください。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
...基本的に、私はcriteria
がparent_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の目的は無効になります。
編集:、クエリが正常に動作している内部結合の後ろに、私は変更なし
おそらく、ここで見ることがないことを知るためだけに質問につまずくことのないように、あなたの答えを受け入れるようにしてください。 –
StackExchangeは、私が自分の答えを受け入れたことを示すために2日待つ必要があると伝えています。 – Jason
ああ、私は、ごめんなさい。私はいくつかの時間制限があることを知っていた、ちょうど待っている期間が長いことを認識していなかった。 –