2012-10-09 192 views
0

我正在嘗試在所有查詢中完成所有這些SELECT語句,以便我可以對它進行進一步分組。我相信我必須在TABLE1上告訴JOIN。我可以告訴你,它應該加入名爲ITEM的字段。我已經嘗試了幾十個JOIN語句,其中沒有任何技巧,因爲我在子查詢中有兩個WHERE語句。MySql SELECT子查詢JOIN

SELECT ITEM, DSI, LEADTIME, 
(SELECT COUNT(ORDER_NUMBER) FROM SUBTABLE1 TR1 WHERE TRANS_DATE BETWEEN DATE_SUB(curdate(), INTERVAL 730 DAY) AND DATE_SUB(curdate(), INTERVAL 365 DAY)) 
as OLDORDERS, 
(SELECT COUNT(ORDER_NUMBER) FROM SUBTABLE2 TR2 WHERE TRANS_DATE BETWEEN DATE_SUB(curdate(), INTERVAL 364 DAY) AND curdate()) 
as NEWORDERS 
FROM TABLE1 

顯示:

ITEM | DSI | LEADTIME | OLDORDERS | NEWORDERS 
PROD-1 0   1   16036  38399 
PROD-2 1   0   16036  38399 
PROD-3 1   1   16036  38399 

一次...我相信我也需要在子查詢JOIN領域ITEM,但我不知道如何做到這一點,任何想法?

回答

4

實際上您並不需要JOIN,本身;相反,您需要「關聯」您的子查詢,以便它們引用其包含的查詢中的數據。

你還沒有給你確切的表定義,所以我不能肯定地說,但這裏是我猜測你需要什麼:

SELECT item, dsi, leadtime, 
     (SELECT COUNT(order_number) 
      FROM subtable1 
      WHERE trans_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 730 DAY) 
           AND DATE_SUB(CURDATE(), INTERVAL 365 DAY) 
       -- restrict to "current" record from TABLE1: 
      AND subtable1.item = table1.item 
     ) as OLDORDERS, 
     (SELECT COUNT(order_number) 
      FROM subtable1 
      WHERE trans_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 364 DAY) 
           AND CURDATE() 
       -- restrict to "current" record from table1: 
      AND subtable1.item = table1.item 
     ) as NEWORDERS 
    FROM table1 
; 

這是假設table1.item是主鍵,而subtable1.item是一個涉及它的外鍵。當然,如果情況並非如此,你必須調整查詢。

+0

我確實相信這是有效的,我必須設置一個「LIMIT」才能工作,否則它會超時。 – ToddN