2012-04-19 18 views
0

編輯:沒關係,想通了,如果您有興趣,請在下面回答。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 

...基本上,我需要的fieldchild_tablecriteria匹配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子句結束,後面的內連接,而無需更改

回答

0

哎,沒關係,我理解了它,查詢是否工作正常而且這裏沒有足夠的數據讓其他人在這裏弄清楚。基本上,在child_table中有一個孩子的交易,child_table中有其他孩子的當前數量。因此,該查詢適當地指出,對於指定的父母在指定時間內發生交易的任何子女,沒有當前數量。

問題就來了,因爲在處理此查詢的結果,我回去,並要求有關所有兒(而不是僅僅與相關交易的人,我應該有)當前的數據,並獲得信息即使這個查詢(正確)告訴我沒有。

沒有在這裏看到,移動。

+0

也許你應該打勾你的答案,以便讓人們不會偶然發現問題而僅僅發現這裏沒有什麼可以看到的東西。 – 2012-04-19 19:33:25

+0

StackExchange告訴我我需要等待2天才能將自己的答案標記爲已接受。 – Jason 2012-04-20 00:03:27

+0

啊,我明白了,對不起。我知道有一些時間限制,只是沒有意識到等待時間很長。 – 2012-04-20 05:03:01

相關問題