gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:13:49 25 4
gpt4 key购买 nike

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

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

但是这个 y 为空。因此,整个查询将返回 null。如果 y 等于 null,我希望它为 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) 但它不起作用:/

感谢您的帮助

更新

我刚刚注意到,当我删除第一个子查询时,它起作用了!因此,这意味着问题来自第一个子查询,而不是两者。改变整个查询结果的是行 type = Timeslot::LUNCH (即 2)。但在第二个子查询中,我有 Timeslot::OVERTIME ,它是 3,所以它是相同的东西,但它正在工作......

最佳答案

评论太长了。

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

它们不会从结果集中过滤行。就这么简单。

换句话说,您在 SELECT 的两个子查询中执行的任何操作都不会影响返回的行数。它们仅影响该特定列的值。

关于php - SELECT 中的 mySQL 空 SELECT 不应为整个查询返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com