过去两天我一直在搞单个查询。 我试图解剖它的各个方面的个别部分,并发现查询只有当我添加在左外部联接中断。 我试过很多不同的方法,甚至有我的参考表加入到我想在我的实际声明中使用的一些表中,但迄今无济于事。MySQL - 无尽的查询左外部联接
(注;列选择一直保持在“*”的可读性,有一吨的行这里通常的行为是一样的,当我与*选择测试。)
我的完整的查询:
SELECT *
FROM SO_SalesOrder so
INNER JOIN SO_Leg as l ON l.SalesOrder = so.SalesOrdernr
INNER JOIN SO_Cargo cg ON cg.Cargonr = l.Cargo
INNER JOIN SO_Activity ea ON ea.Activitynr = l.EndActivity
INNER JOIN SO_Activity ba ON ba.Activitynr = l.BeginActivity
LEFT OUTER JOIN RP_TripActivity eta ON eta.Activity = l.EndActivity
LEFT OUTER JOIN Product p ON p.Productnr = cg.Product
WHERE ba.Date BETWEEN '2015-10-01 00:00:00' AND '2015-10-07 23:59:59'
AND OrderStatus != 2
AND so.Customer = 95;
此数据库已从MS-SQL服务器传输,因此我正在重写查询以适应此更改。 旧查询(仍然)的作品,并用于如下:
SELECT *
FROM dbo.SO_SalesOrder as so
INNER JOIN dbo.SO_Leg as l ON l.SalesOrder = so.SalesOrdernr
INNER JOIN dbo.SO_Cargo AS cg ON cg.Cargonr = l.Cargo
INNER JOIN dbo.SO_Activity AS ea ON ea.Activitynr = l.EndActivity
INNER JOIN dbo.SO_Activity AS ba ON ba.Activitynr = l.BeginActivity
LEFT OUTER JOIN dbo.RP_TripActivity AS eta ON eta.Activity = l.EndActivity
LEFT OUTER JOIN dbo.RP_Trip AS et ON et.Tripnr = eta.Trip
LEFT OUTER JOIN dbo.RP_ResourceCombination AS erc ON erc.ResourceCombinationnr = eta.ResourceCombination
LEFT OUTER JOIN dbo.RP_Resource AS er1 ON er1.Resourcenr = erc.Truck
LEFT OUTER JOIN dbo.RP_ResourceCompany AS erc1 ON erc1.Resource = er1.Resourcenr AND erc1.Company = et.Company
LEFT OUTER JOIN dbo.VM_Vehicle AS ev1 ON ev1.Vehiclenr = er1.Vehicle
LEFT OUTER JOIN dbo.RP_Resource AS er3 ON er3.Resourcenr = erc.Driver
LEFT OUTER JOIN dbo.HR_Employee AS eemp3 ON eemp3.Employeenr = er3.Employee
LEFT OUTER JOIN dbo.Product AS p ON p.Productnr = cg.Product
WHERE ba.Date BETWEEN '2015-10-01 00:00:00'
AND '2015-10-07 23:59:59'
AND OrderStatus != 2
AND so.Customer = 95;
会有人也许有任何指针作为的地方,我可能会搞砸了?
我试过的东西: 删除WHERE子句,添加“AS”关键字(也在MSSQL中完成),试图在一个表上尝试一个左外连接和一个内连接。
编辑:可能值得注意的是,这将是我第一次使用MySQL而不是MSSQL/T-SQL,我当然试图查找其他示例,但迄今为止这并没有帮助我。
是否已经在mysql上创建了sql-server中存在的索引?我不知道sql-server,但是mysql只能为每个查询使用一个索引,所以即使你创建了相同的索引,它们可能仍然不适合你。 – e4c5
显然'MySQL'可以为每个查询使用多个索引。来源:http://stackoverflow.com/questions/12222630/can-mysql-use-multiple-indexes-for-a-single-query –
如果你有权访问SQL Server Management Studio,你可以使用查询优化工具创建应该有助于查询执行时间的索引和统计信息。 – HashPsi