使用子查询和连接优化进行查询
query using subquery and joins optimization
不知何故我对我的查询语句不满意,想知道是否有其他更好的方法来做到这一点:
SELECT product.product,
COALESCE((SELECT SUM(qty) FROM stocktrxn
INNER JOIN stock on stock.tra_no = stocktrxn.tra_no
WHERE product_no = s1.product_no and stock.is_out = false) -
(SELECT SUM(qty) FROM stocktrxn
INNER JOIN stock on stock.tra_no = stocktrxn.tra_no
WHERE product_no = s1.product_no and stock.is_out = true), 0)
as qty
FROM stocktrxn s1
RIGHT JOIN product on product.id = s1.product_no
GROUP BY product ASC;
我认为您只需要条件聚合。像这样:
SELECT p.product,
(SUM(CASE WHEN s.is_out = false THEN qty ELSE 0 END) -
SUM(CASE WHEN s.is_out = true THEN qty ELSE 0 END) -
) as qty
FROM product LEFT JOIN
stocktrxn st
ON p.id = st.product_no LEFT JOIN
stock s
ON s.tra_no = st.tra_n
GROUP BY p.product ASC;
不知何故我对我的查询语句不满意,想知道是否有其他更好的方法来做到这一点:
SELECT product.product,
COALESCE((SELECT SUM(qty) FROM stocktrxn
INNER JOIN stock on stock.tra_no = stocktrxn.tra_no
WHERE product_no = s1.product_no and stock.is_out = false) -
(SELECT SUM(qty) FROM stocktrxn
INNER JOIN stock on stock.tra_no = stocktrxn.tra_no
WHERE product_no = s1.product_no and stock.is_out = true), 0)
as qty
FROM stocktrxn s1
RIGHT JOIN product on product.id = s1.product_no
GROUP BY product ASC;
我认为您只需要条件聚合。像这样:
SELECT p.product,
(SUM(CASE WHEN s.is_out = false THEN qty ELSE 0 END) -
SUM(CASE WHEN s.is_out = true THEN qty ELSE 0 END) -
) as qty
FROM product LEFT JOIN
stocktrxn st
ON p.id = st.product_no LEFT JOIN
stock s
ON s.tra_no = st.tra_n
GROUP BY p.product ASC;