为什么INNER JOIN不能正常工作?

时间:2017-04-16 20:21:01

标签: mysql sql inner-join

我有一个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

3 个答案:

答案 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部分中使用的其他表字段。