【问题标题】:Compare 2 SQL tables, if data does not match, put an integer value in 3rd table比较 2 个 SQL 表,如果数据不匹配,则在第 3 个表中放入一个整数值
【发布时间】:2015-12-30 19:36:30
【问题描述】:

有没有办法比较 3 个 sql 表(A、B、C)?哪个 A 和 B 在 A 中具有标记为 Name、TimeStamp 和 B 中的 Name、ScheduledTime 的列。我需要比较这 2 列,如果它们不匹配,请将数值 1 放入表中名称旁边的第 2 列C. 我对 SQL 还很陌生,但不确定这是否可行。 (使用 SSMS)

表 A 看起来像这样。

Name   |   Time                           
-----------------
John   |   7:00AM
Joe    |   7:07AM
Tim    |   7:25AM

表 B 如下所示。

Name   |   Schedule
--------------------
John   |   7:00AM
Joe    |   7:00AM
Tim    |   7:00AM

表 C 应如下所示。

Name   |   Number
-----------------
John   |   0
Joe    |   1
Tim    |   1

【问题讨论】:

  • 请描述您的表结构、输入数据和预期输出,以及到目前为止您尝试过的 SQL。
  • 请编辑您的问题并提供示例数据和所需结果。更清楚地考虑这些场景:如果一个表中有行而另一个表中没有行会发生什么?如果时间戳相差一秒怎么办?表 C 是否正在更新或正在插入新行?
  • 如果表 A 中出现的名称不在表 B 中,我希望它只是“跳过”该行并转到下一个数据。时间戳应仅按分钟记录(其深度不为秒)。

标签: sql sql-server ssms


【解决方案1】:

对于您的示例数据,以下内容将起作用:

select a.name, (case when a.time = b.schedule then 0 else 1 end) as number
into c
from a join
     b
     on a.name = b.name;

尚不清楚这是否是通用解决方案,但它适用于提供的数据。

编辑:

SQL Fiddle 现在似乎没有运行 MS SQL 代码。但here 是一个 SQL Fiddle,我相信它会证明上述方法有效。

【讨论】:

  • 完全按照需要工作。我需要问更多的 SQL 问题,但我将作为单独的问题为他们打开。谢谢戈登。
  • 我可能有点太快了,它会根据需要创建表和列,并说它成功但从未生成数据。列中没有名称或 0 或 1。
  • 如果 SELECT...INTO 不适合您的使用,可以在 CREATE VIEW 或 INSERT 语句中使用相同的查询(取决于您是否需要自动更新)跨度>
猜你喜欢
  • 2021-08-05
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多