【问题标题】:SQL Full differences between TablesSQL 表之间的完整差异
【发布时间】:2014-06-02 16:58:26
【问题描述】:

在我的 C# 项目中,我用 SQL 表描述了一些设备,其中所有功能都用几个参数来描述,例如:

Function    Position   Default ...
Autoreset   5          0
Power       9          1
Adjust      0          22
...

有时会发生新版本替换之前版本的情况,并且通常新版本相对于之前版本几乎没有变化。举个例子,有可能有

  • 功能已移除
  • 新增功能
  • 一些参数的功能发生了变化(在前面的例子中,新版本可以将电源默认值从 1 更改为 6)
  • ...

我想看到的是一个表的变化,而不仅仅是两个表之间的差异列表,而是例如一个表:

  1. 普通文本的常用值
  2. 以红色粗体添加的值
  3. 以灰色删除的值
  4. 数值变为绿色

我的想法是使用 JOIN 命令来创建三个表:

  1. 具有共同值的表格
  2. 表与表 1 和表 2 的差异(表 2 中的附加值)
  3. 表与表 2 和表 1 的差异(表 1 中的附加值)

我使用以下指令从 SQL 开始开发

SqlCommand comando = new SqlCommand("select * from " + TableName1 + "  FULL OUTER JOIN " + TableName2 + " ON " + TableName1 + ".FieldName="+ TableName2 +".FieldName", conn);

但似乎我需要指定所有列。是否可以对所有列进行 JOIN?

BR

【问题讨论】:

    标签: c# sql inner-join outer-join


    【解决方案1】:

    我不太了解您如何在不同表之间存储数据,但基本上您只需要根据函数列查看表之间的差异。如果您列出所有列,则在结果集中,您将仅获得与所有列匹配的记录的非 NULL 行。因此,要确定差异,您的选择应该是:

    select * from TCommon full join T1 on TCommon.[Function] = T1.[Function] full join T2 on TCommon.[Function] = T2.[Function]

    如果通过 [Function] 找到,结果将为您提供表中的值,否则为 NULL。至于着色属性之间的差异,我会确定 C# 中的差异。

    在最常见的选项中,您的结果集将是

    TCommon.[Function]    TCommon.A1    T1.[Function]    T1.A1    T2.[Function]    T2.[A1]
    Autoreset             1             Autoreset        2        NULL             NULL
    Power                 2             NULL             NULL     Power            3
    Adjust                3             NULL             NULL     Adjust           3
    ...     
    

    NULL 值表示该项目不存在(已删除或未添加),属性差异表示该属性已更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      相关资源
      最近更新 更多