感谢您查看我的帖子,感谢任何帮助/指导。我的SQL技能缺乏,我尝试了几种解决方案但没有成功。无论如何,我需要为以下查询创建一个VIEW:
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或子查询的情况下完成此操作,但我无法提出解决方案。
感谢任何帮助/指导。
答案 0 :(得分:2)
您不需要子查询。
...
LEFT JOIN orderItem AS t5
ON t5.orderID = t1.orderID
AND t5.productStatusID IN (02,03)
JOIN color ...
这与您的查询完全相同,但更有效率,因为它避免了派生表。