【问题标题】:MySQL: Returning Multiple values even if no resultsMySQL:即使没有结果也返回多个值
【发布时间】:2017-06-28 22:06:06
【问题描述】:

Previous Solution for one Value

如果我们有一个包含多个 ID 值的查询,有没有办法返回多个 NULL 或 'nan' 值?换句话说,如果一个表有一个作为主键的日期时间“ID”。它以一秒为单位递增。其中一些秒(条目)丢失了,一旦查询大量 ID,您可能希望返回“nan”或“empty”。

一个值的工作代码:

SELECT ID FROM TABLE WHERE ID in ('2017-06-29 23:10:00') UNION ALL (SELECT 'nan') LIMIT 1

试图实现对多个值的动态查询。在此示例中,我查询了 3 个 ID,但列表可能会增长到数千个 - 无效示例:

SELECT ID FROM TABLE WHERE ID in ('2017-06-29 23:10:00', '2017-06-29 23:10:01','2017-06-30 00:11:03') UNION ALL (SELECT 'nan') LIMIT 1

【问题讨论】:

  • 如果我理解正确,你有一个SQL "gaps-and-islands" 问题。这里的许多问题都涉及数据系列中的“缺失天数”。你的问题本质上是一样的,只是你错过了几秒钟。
  • 没错。
  • 你能显示表格内容和想要的结果吗?

标签: mysql sql


【解决方案1】:

使用UNION 合成一个包含您要匹配的所有 ID 的表,然后将其与真实表连接起来。当表中没有匹配项时,LEFT JOIN 的列会生成NULL,您可以对此进行测试并显示默认值。

SELECT IFNULL(t2.id, 'nan') AS id
FROM (SELECT '2017-06-29 23:10:00' as id
      UNION ALL
      SELECT '2017-06-29 23:10:01'
      UNION ALL
      SELECT '2017-06-29 23:10:02') AS t1
LEFT JOIN TABLE AS t2 ON t1.id = t2.id

请参阅What is the most straightforward way to pad empty dates in sql results (on either mysql or perl end)?,了解如何自动化创建包含所有时间戳的表的过程。

【讨论】:

  • 谢谢,但我不确定这是否能解决问题。我将更新问题,提供更多说明。
  • 所以您要查找多行而不是多列?
猜你喜欢
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多