2017-03-07 88 views
0

感谢您查看我的文章,任何帮助/指导表示赞赏。我的SQL技能缺乏,我尝试了几种解决方案,但都没有成功。无论如何,我需要创建一个查看以下查询:替代查看以外的子查询

CREATE VIEW open_orders AS 
SELECT 
t1.orderID, 
DATE_FORMAT(t1.orderDate,'%m-%d-%Y') AS orderDate, 
t6.colorName, 
t1.originID, 
t1.rackNumber, 
t2.locationNumber AS originNumber, 
t2.locationName AS originName, 
t3.locationName AS destinationName, 
t4.locationStatusName, 
COUNT(t5.orderID) AS totalCount 
FROM `order` AS t1 
JOIN `location` AS t2 ON t1.originID = t2.locationID 
JOIN `location` AS t3 ON t1.destinationID = t3.locationID 
JOIN `locationStatus` AS t4 ON t1.locationStatusID = t4.locationStatusID 
LEFT JOIN (SELECT * FROM `orderItem` WHERE `productStatusID` = 02 OR `productStatusID` = 03) AS t5 ON t1.orderID = t5.orderID 
JOIN `color` AS t6 ON t1.requestedColorID = t6.colorID 
WHERE t1.orderStatusID = 01 
GROUP BY t1.orderID 
ORDER BY t1.orderDate DESC, t1.orderID DESC; 

问题是与子查询。因为我无法在FROM语句中使用子查询,所以我试图使用VIEW。但是,表格很大,这种方法会导致太多的性能问题。

我敢肯定,有一种方法可以在不使用VIEW或子查询的情况下完成此任务,但却无法提供解决方案。

任何帮助/指导表示赞赏。

回答

2

你不需要子查询。

... 
LEFT JOIN orderItem AS t5 
     ON t5.orderID = t1.orderID 
     AND t5.productStatusID IN (02,03) 
JOIN color ... 

这和你的查询做的事情是一样的,但是由于它避免了派生表,所以效率更高。

+0

完美!非常感谢Michael! – ObsDev