2012-10-09 149 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