SQL查询,子查询不会返回数据

时间:2016-09-08 01:43:27

标签: mysql subquery coalesce isnull ifnull

问题:我的查询返回NULL 潜在问题:子查询格式错误,只有在我要整理的某些数据位于数据集中时才有效。

今天的代码示例:

 SELECT production_order
,SUM(total_working_time_h) - (SELECT SUM(total_working_time_h) FROM {$table} WHERE production_order = '$production_order' AND (station = '出货检验 | OQC' OR production_type = 'Rework')) AS total_working_time_h_edit
,SUM(no_of_defects)         AS no_of_defects_during_production
FROM {$table}
WHERE production_order = '$production_order'  

只要我有"返工"和/或"'出货检验| OQC'"在我的数据库中登录此生产订单。如果没有,我根本不会获得任何数据,但只有NULL。所以我的问题是在我的子查询中的某个地方我认为:

 SELECT SUM(total_working_time_h) FROM {$table} WHERE production_order = '$production_order' AND (station = '出货检验 | OQC' OR production_type = 'Rework')

我尝试添加" 0"确保它获得0而不是NULL而没有成功,如下所示:

(0 + SELECT SUM(total_working_time_h) FROM {$table} WHERE     production_order = '$production_order' AND (station = '出货检验 | OQC' OR     production_type = 'Rework')

格式化为示例的数据集:

production_order    part_nr         station                            total_working_time_h 
26135               129-108816B-UL  压接 | Crimping                     1.42
26135               129-108816B     线束组装 | Harness Assembling        7.67
26135               129-108816      测试 | Testing                       0.83
26135               129-108816B     外观全检 | Appearance inspection      0.83

给出这个输出:

production_order,total_working_time_h_edit
26135, NULL

我想要这个输出:

production_order,total_working_time_h_edit
26135, 10,45

如果我的数据集保存了我想要整理的工作站,或者我要整理的production_type一切都按预期工作。但是如果数据集中缺少这两个,它返回NULL,因为我认为是因为子查询返回0。

我使用的不同数据集的示例。如果我在数据集中有绿色单元格标记的数据,它将起作用。如果没有,我得到如上所述的返回NULL。

那么如何让我的子查询不返回NULL?

Data

1 个答案:

答案 0 :(得分:1)

管理自己解决问题。

问题:子查询返回NULL而不是0。

解决方案:将COALESCE(,0)添加到我的子查询函数SUM()中,如下所示:

 COALESCE(SUM(total_working_time_h),0)

通过这样做,当SUM()实际上想要返回NULL时,它返回0而不是NULL。这解决了我的问题。