SQL表之间的完全不同

时间:2014-04-18 07:47:41

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

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

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

有时会发生新版本替换前一版本,通常新版本与前一版本相比几乎没有变化。只是举个例子,可以有

  • 功能已删除
  • 添加了功能
  • 在某些参数中更改了功能(在上一个示例中,新版本可以将Power默认值从1更改为6)
  • ...

我希望看到的是表中的更改,但不仅仅是两个表之间的差异列表,而是例如一个表格:

  1. 普通值作为普通文本
  2. 以红色粗体添加的值
  3. 以灰色删除的值
  4. 值已更改为绿色
  5. 我的想法是使用JOIN命令以获得三个表:

    1. 具有共同值的表
    2. 与表1和表2(表2中添加的值)不同的表
    3. 与Table2和Table1(表1中添加的值)不同的表
    4. 我使用下面的指令从SQL开始开发

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

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

      BR

1 个答案:

答案 0 :(得分:0)

我不太了解如何在不同的表之间存储数据,但基本上你只需要根据Function列查看表之间的差异。如果您列出所有列,则在结果集中,您将仅为所有列匹配的记录获取非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值表示该项目不存在(已删除或未添加),属性差异表示该属性已更改。