我有一个INNER JOINS的SQL查询。我需要从表offers
获得所有优惠。
表offers
现在为空。但是以下查询返回一行包含NULL字段。
为什么要归还?如何解决?如果table为空,我需要返回0行。
查询:
select *, SUM(offers.price * announcement_product.amount) AS total, announcements.user_id AS creator_ann, announcements.id AS ann_id,
announcements.delivery AS deliveryAnn, announcements.payment AS
paymentAnn, SUM(announcement_product.amount) AS amount,
announcement_product.name as name_product
from `offers`
inner join `announcements` on `announcements`.`id` = `offers`.`announcement_id`
inner join `announcement_product` on `offers`.`announcement_product_id` = `announcement_product`.`id`
inner join `countries` on `countries`.`id` = `announcements`.`country`
where `offers`.`user_id` = 1 and `offers`.`status` = 1 and `offers`.`deleted_at` is null
答案 0 :(得分:2)
您正在使用汇总功能SUM()
,但您没有GROUP BY
条款。
当你这样做时,你指示MySQL在SUM()
中提到的列中添加所有行值。即使没有要添加的行,它也会这样做。
为了获得最佳效果,您应该了解GROUP BY
函数以及如何将其与SUM()
一起使用。很难从你的查询中猜出你想要什么。
答案 1 :(得分:0)
我不确定,但我不认为
select *, ..
当查询中有多个表有效时。
尝试
select offers.*,..
答案 2 :(得分:0)
您的选择结构应如何: 选择 ID, SKU, 总和(现有量), 总和(价格) 来自mytable 哪里有mytable Onhand> 0 通过...分组 ID,SKU 如果你要使用聚合函数,如Max,Sum,Min,.... 您需要将group by用于您在select部分中使用的其他表字段。