SELECT中的mySQL空SELECT不应该为整个查询返回null

时间:2016-10-07 16:31:10

标签: php mysql sql

我在选择中使用了选择,如下所示:

SELECT id, 
(
    SELECT name FROM xxx WHERE xxx
) as y 
FROM xxx

但是这个y是空的。因此,整个查询返回null。如果它等于null,我希望这个y为0,所以不要改变应返回多个元组的整个查询的结果。

这是我的完整查询:

        SELECT id, begin, end, location_id, out_location_id, lat, lng, out_lat, out_lng, LEFT(TIMEDIFF(end, begin), 5) as duration, 
        (
          SELECT LEFT(TIMEDIFF(end, begin), 5)
          FROM timeslots l
          WHERE user_id = '.$userId.'
          AND type = '.Timeslot::LUNCH.'
          AND parent_id = t.id 
        ) as lunch, 
        (
          SELECT LEFT(TIMEDIFF(end, begin), 5)
          FROM timeslots o
          WHERE user_id = '.$userId.'
          AND type = '.Timeslot::OVERTIME.'
          AND parent_id = t.id 
        ) as overtime
        FROM timeslots t
        WHERE user_id = '.$userId.'
        AND approved = 1
        AND type = '.Timeslot::DAY.'
        AND DATE(begin) >= "'.$startDay.'"
        AND DATE(end) <= "'.$endDay.'"
        ORDER BY begin

我尝试过COALESC(y,0)和IFNULL(y,0),但它不起作用:/

感谢您的帮助

更新

我刚注意到,当我删除第一个子查询时,它可以工作!所以这意味着问题来自第一个子查询,而不是两者。更改整个查询结果的是行类型= Timeslot :: LUNCH(为2)。但是在第二个子查询中,我有Timeslot :: OVERTIME这是3,所以它是相同的,但它正在工作...

1 个答案:

答案 0 :(得分:0)

评论太长了。

SELECT中的子查询称为标量子查询。它们总是返回一列,最多一行。如果它们没有返回任何行,则值为NULL

他们过滤结果集中的行。就这么简单。

换句话说,SELECT中两个子查询中的 nothing 会影响返回的行数。它们仅影响该特定列的值。