mysql - 除了 View 之外的子查询的替代方案

标签 mysql sql database view subquery

感谢您查看我的帖子,感谢任何帮助/指导。我的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 或子查询的情况下完成此任务,但我无法找到解决方案。

感谢任何帮助/指导。

最佳答案

您不需要子查询。

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

这与您的查询执行相同的操作,但效率更高,因为它避免了派生表。

关于mysql - 除了 View 之外的子查询的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42639717/

相关文章:

sql - 具有多个 where 语句的过程

php - 如何查询表的一部分

php - 插入用户ID和字段

php - 检查并更新数据库条目 php

mysql - 防止第三方连接到 SQL 数据库(来自 config.php 文件)

mysql - 如何将openstreetmap数据放入我的mysql数据库中?

php - 如何使用php脚本更改mysql用户密码?

.net - 找不到非对称 key ——因为它不存在或您没有权限

mysql - SQL:如果用户没有为属性定义任何数据类型或将所有数据类型保留为 varchar 怎么办?

php - DB查询土耳其语字母之间的差异 - Octobercms