如何重做以下查询以仅使用JOIN而不是嵌套查询?
SELECT SUM(allqty) AS allqty
,COUNT(*) AS orders
FROM (SELECT SUM(S.Qty) AS allqty
FROM data_intra.yw1_ordersheet S
INNER JOIN data_intra.productdata P ON P.productid=S.productid
WHERE P.eCode LIKE (SELECT eCode
FROM data_intra.productdata
WHERE productid=1001)
GROUP BY S.OrderPO) as A;
答案 0 :(得分:1)
这是2个猜测。两者都使用IN()而不是LIKE()
这将为每个S.OrderPO
生成一行SELECT
SUM(S.Qty) AS allqty
, S.OrderPO
FROM data_intra.yw1_ordersheet S
INNER JOIN data_intra.productdata P
ON P.productid = S.productid
WHERE P.eCode IN (
SELECT
eCode
FROM data_intra.productdata
WHERE productid = 1001
)
GROUP BY
S.OrderPO
;
这将产生一行,计算S.OrderPO的不同数量
SELECT
SUM(S.Qty) AS allqty
, COUNT(DISTINCT S.OrderPO) AS orders
FROM data_intra.yw1_ordersheet S
INNER JOIN data_intra.productdata P
ON P.productid = S.productid
WHERE P.eCode IN (
SELECT
eCode
FROM data_intra.productdata
WHERE productid = 1001
)
;