【问题标题】:how to give default value to subquery in mysql?如何为mysql中的子查询赋予默认值?
【发布时间】:2014-08-02 12:26:12
【问题描述】:

在我的查询中,我可以给子查询一些默认值吗?

我的一个子查询可能没有任何值。在这种情况下,它返回 null 作为整个结果。如果子查询之一为空,我可以分配一些默认值吗?

select 
    t1 . *, t2.speed, t3.Accelerometerx
from
    (SELECT 
        *
    FROM
        `table1`
    ) as t1,
    (SELECT 
       *
    FROM
        table1)
    as t2

【问题讨论】:

标签: mysql sql


【解决方案1】:

检查 nvl 功能,它应该可以解决您的问题。

【讨论】:

  • 我试过 ifnull .. 但没用:选择 t1 。 *, t2.speed, ifnull(t3.Accelerometerx,"") .....
  • 你说它不起作用是什么意思?它返回一个错误,或者它只是没有给你想要的结果?
  • 它不返回任何值
【解决方案2】:

用例/如果:

CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE

示例,而不是:

where
    `vehicle_tripdetails`.`Param_ID` = '131'
        and trip_id = 127) as t1,
(SELECT 
    time_stamp, `vehicle_tripdetails`.`Param_Data` as speed
FROM
    `vehicle_tripdetails`
where
    `vehicle_tripdetails`.`Param_ID` = '13'
        and trip_id = 127) as t2,

你可以使用:

where
    `vehicle_tripdetails`.`Param_ID` = '131'
        and trip_id = 127) as t1,
CASE 
  WHEN (SELECT  time_stamp, `vehicle_tripdetails`.`Param_Data` as speed FROM
    `vehicle_tripdetails` where
    `vehicle_tripdetails`.`Param_ID` = '13'
        and trip_id = 127) 
  IS NOT NULL 
THEN (SELECT  time_stamp, `vehicle_tripdetails`.`Param_Data` as speed FROM
    `vehicle_tripdetails` where
    `vehicle_tripdetails`.`Param_ID` = '13'
        and trip_id = 127) 
ELSE
   'default value'
END CASE
AS t2

【讨论】:

    【解决方案3】:

    在您的选择子句中使用 ISNull,如下所示

    select    t1.*,
              CASE ISNULL(t2.speed) WHEN 1 THEN 0 ELSE t2.speed END,
              CASE ISNULL(t3.xyz) WHEN 1 THEN 0 ELSE t3.xyz END
    

    这里默认值为 0。如果您不使用 * 选择所有记录,这将起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2011-02-19
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      相关资源
      最近更新 更多