編輯:沒關係,想通了,如果您有興趣,請在下面回答。JOIN可以單獨使用兩張桌子,但不能同時使用時
使用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
...基本上,我需要的field
從child_table
時criteria
匹配parent_table
我提供的數據,當有在這一期間在child_transaction
至少一個相關的交易。如果child_current_status
視圖中有數量,我們也需要這些數量。
t1.field
可以被認爲是一種人類可讀的等效數字鍵t4.criteria
。
我的問題是,即使有數據,提供的查詢也無法提供來自child_current_status
的數量數據。
編輯:澄清,上述查詢返回field, NULL
,它應該返回field, current_qty
,因爲當我更改爲LEFT JOIN
,它返回相關量數據的問題是關係到t2
子查詢, :
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
交易請求的報告期間或不
...我都已經做是把第一個連接成一個LEFT JOIN,並查詢有關數量在child_current_status
返回。如果我將child_current_status
更改爲INNER JOIN,則查詢不會返回任何內容。使第一個JOIN成爲LEFT JOIN的問題是我需要它僅在返回從子查詢返回的數據時返回結果,在這種情況下,請求時間段內有數據。
要渾水,它正常工作一些t4.criteria
,763只是一個失敗。
我在這裏錯過了什麼?
短版:從上面的第一個查詢,當第一個連接是內連接,它會導致LEFT JOIN返回什麼。當它是一個左連接時,在child_current_status
上的左連接返回正確的數據,但是這抵消了第一連接的目的。
編輯:我已經試過移動LEFT JOIN到的FROM子句結束,後面的內連接,而無需更改
也許你應該打勾你的答案,以便讓人們不會偶然發現問題而僅僅發現這裏沒有什麼可以看到的東西。 – 2012-04-19 19:33:25
StackExchange告訴我我需要等待2天才能將自己的答案標記爲已接受。 – Jason 2012-04-20 00:03:27
啊,我明白了,對不起。我知道有一些時間限制,只是沒有意識到等待時間很長。 – 2012-04-20 05:03:01