我的SQL查询有问题。如果给定的订单包含项目,则女巫不包含子项目,则为零订单的总价格,否则此查询工作正常。
SELECT o.`id`, o.`date`, c.`name`,
((i.`quantity` * i.`price`) +
SUM(i.`quantity` * subi.`quantity_kg` * subi .`price`)) as total_price
FROM `order` o
JOIN `customer` c ON o.`id_customer`=c.`id`
LEFT JOIN `order_item` i ON i.`id_order`= o.`id`
LEFT JOIN `order_subitem` subi ON si.`id_product`= i.`id_product`
GROUP BY o.`id`
感谢您的帮助。
答案 0 :(得分:2)
在您的子项目字段中使用coalesce
ifnull
:
SELECT o.`id`, o.`date`, c.`name`,
((i.`quantity` * i.`price`) +
SUM(i.`quantity` * coalesce(subi.`quantity_kg`, 0) * coalesce(subi .`price`, 0))) as total_price
这可以确保这些字段不会因为null而破坏整个计算。例如。 null + 1 = null
答案 1 :(得分:1)
SELECT o.`id`, o.`date`, c.`name`,
((i.`quantity` * i.`price`) +
SUM(i.`quantity` * IFNULL(subi.`quantity_kg`, 0) * IFNULL(subi .`price`, 0))) as total_price
FROM `order` o
JOIN `customer` c ON o.`id_customer`=c.`id`
LEFT JOIN `order_item` i ON i.`id_order`= o.`id`
LEFT JOIN `order_subitem` subi ON si.`id_product`= i.`id_product`
GROUP BY o.`id`
如果您知道order_item应该存在,那么您应该为此表使用INNER JOIN。
答案 2 :(得分:1)
我怀疑问题是你返回的是NULL,而不是0.为了解决这个问题,你只需要coalesce函数来处理NULL情况:
SELECT o.`id`, o.`date`, c.`name`,
((i.`quantity` * i.`price`) +
SUM(i.`quantity` * coalesce(subi.`quantity_kg`, 0) * coalesce(subi .`price`, 0))
) as total_price
FROM `order` o JOIN
`customer` c
ON o.`id_customer`=c.`id` LEFT JOIN
`order_item` i
ON i.`id_order`= o.`id` LEFT JOIN
`order_subitem` subi ON si.`id_product`= i.`id_product`
GROUP BY o.`id`