【问题标题】:How do you get get absent rows from a SQL table?如何从 SQL 表中获取缺失的行?
【发布时间】:2015-12-08 01:01:52
【问题描述】:

我不确定我是否在标题中正确地问了这个问题,但这里是正确的场景。

假设我有每天插入行的 SQL 表。在这些行中,有一列具有一组值。这意味着在此列中,我们将其称为 Source_system,我们每天会收到 20 个值。每天都有相同的不同值。现在有什么办法可以得到当天没有插入的源系统的名称吗?

编辑:抱歉英语不好。

【问题讨论】:

  • 向我们展示表定义、一些示例数据和想要的结果。
  • 现在有什么方法可以得到当天没有插入的源系统的名称吗? 是的。使用外连接和所有系统的列表。假设 yourTableName 具有一组完整值的示例:Select ST.InsertedDay, B.Source_System from (Select Distinct source_System from yourTableName) B LEFT JOIN yourTableName ST on B.Source_System = ST.Source_System WHERE ST.Source_System is null
  • 让我解释一下这个场景。假设有一张表保存学生的出勤记录。它有 3 列,学生姓名、日期和出勤率(Y/N)。现在,只有当学生当天来时,才会为学生填写该行,否则不会在此表中插入任何内容。所以基本上我想获取在特定日期没有出现的学生的名字(那天没有插入他们的行)我希望这会有所帮助。

标签: sql missing-data insertion


【解决方案1】:

根据数据的格式化方式,有多种方法可以做到这一点。如果未插入的 Source_system 条目为空,则可以使用简单的Where 语句来查找空白并获取其余列的名称

Select *
From Table_name
Where Source_system is null

由于您的 20 个不同值是已知的,如果您在表中有这些值,您还可以Outer Join 表并找到 Source_system 与不同值表中的条目不匹配的行

Select Date_inserted_into_db, Source_system
From Table_name T1
Full Outer Join Table_of_distinct_values T2 on T1.Source_system = T2.Source_system
Where Source_system is null

【讨论】:

  • 好吧,如果说只加载来自 19 个源系统的数据,那么只有 19 个值将被插入到这个表中。没有别的,甚至没有。换句话说,如果尚未加载来自该缺失源系统的数据,则该条目根本不会出现在 Source_system 列中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
相关资源
最近更新 更多