连接多个表并计算行数时挂起查询
Hanging Query when joining multiple tables and counting rows
我正在尝试编写一个查询,该查询将生成一个商家列表,然后计算他们有多少库存商品以及每个商品有多少订单。商家、库存项目和订单都在不同的表中。我希望 return 看起来像这样:
Site | Inventory Items | Orders
London | 7282 | 1234996
Glasgow | 9829 | 734949
我几乎可以立即通过此查询获得站点和库存计数列表:
SELECT M.name AS 'Site',
COUNT(II.idInventoryItems) AS 'Inventory Items',
FROM Merchants M
JOIN
(SELECT idMerchants,
idInventoryItems
FROM InventoryItems) AS II ON II.idMerchants = M.idMerchants
GROUP BY M.name
而且我可以通过非常相似的查询获得站点和订单列表。但是当我将两者结合起来时,查询会无限期挂起,我必须取消查询。这是我一直在使用的完整查询:
SELECT M.name AS 'Site',
COUNT(II.idInventoryItems) AS 'Inventory Items',
COUNT(O.idOrders) AS 'Orders'
FROM Merchants M
JOIN
(SELECT idMerchants,
idInventoryItems
FROM InventoryItems) AS II ON II.idMerchants = M.idMerchants
JOIN
(SELECT idMerchants,
idOrders
FROM Orders) AS O ON O.idMerchants = M.idMerchants
GROUP BY M.name
我尝试做的事情是否可以通过相当快的查询来实现?如果是这样,我做错了什么?
试试这个。将计数移动到派生的 table 将为您提供连接所需的数据,并允许 mysql 在出于性能目的需要时使用 idMerchants 上的索引进行优化。然后,您将加入两个派生的 tables,行数明显减少,这也会提高性能。
SELECT M.name AS 'Site',
II.count AS 'Inventory Items',
O.count as 'Orders'
FROM Merchants M
JOIN
(SELECT idMerchants, COUNT(idInventoryItems) AS 'count'
FROM InventoryItems GROUP BY idMerchants) AS II ON II.idMerchants = M.idMerchants
JOIN
(SELECT idMerchants,
COUNT(idOrders) AS 'count'
FROM Orders GROUP BY idMerchants) AS O ON O.idMerchants = M.idMerchants
我正在尝试编写一个查询,该查询将生成一个商家列表,然后计算他们有多少库存商品以及每个商品有多少订单。商家、库存项目和订单都在不同的表中。我希望 return 看起来像这样:
Site | Inventory Items | Orders
London | 7282 | 1234996
Glasgow | 9829 | 734949
我几乎可以立即通过此查询获得站点和库存计数列表:
SELECT M.name AS 'Site',
COUNT(II.idInventoryItems) AS 'Inventory Items',
FROM Merchants M
JOIN
(SELECT idMerchants,
idInventoryItems
FROM InventoryItems) AS II ON II.idMerchants = M.idMerchants
GROUP BY M.name
而且我可以通过非常相似的查询获得站点和订单列表。但是当我将两者结合起来时,查询会无限期挂起,我必须取消查询。这是我一直在使用的完整查询:
SELECT M.name AS 'Site',
COUNT(II.idInventoryItems) AS 'Inventory Items',
COUNT(O.idOrders) AS 'Orders'
FROM Merchants M
JOIN
(SELECT idMerchants,
idInventoryItems
FROM InventoryItems) AS II ON II.idMerchants = M.idMerchants
JOIN
(SELECT idMerchants,
idOrders
FROM Orders) AS O ON O.idMerchants = M.idMerchants
GROUP BY M.name
我尝试做的事情是否可以通过相当快的查询来实现?如果是这样,我做错了什么?
试试这个。将计数移动到派生的 table 将为您提供连接所需的数据,并允许 mysql 在出于性能目的需要时使用 idMerchants 上的索引进行优化。然后,您将加入两个派生的 tables,行数明显减少,这也会提高性能。
SELECT M.name AS 'Site',
II.count AS 'Inventory Items',
O.count as 'Orders'
FROM Merchants M
JOIN
(SELECT idMerchants, COUNT(idInventoryItems) AS 'count'
FROM InventoryItems GROUP BY idMerchants) AS II ON II.idMerchants = M.idMerchants
JOIN
(SELECT idMerchants,
COUNT(idOrders) AS 'count'
FROM Orders GROUP BY idMerchants) AS O ON O.idMerchants = M.idMerchants