我有一个表A,其中包含有关文件列表的信息。
我还有另一个表B,其中包含有关同一文件列表的信息,但是LastModifyTime
可能会更改。
现在,我想比较这两个表,找到所有差异并将其输入到表C中。表B中可能有新文件,但表A中有新文件。我可以使用
SELECT * FROM Table B
EXCEPT
SELECT * FROM Table A
它只给我列出了差异。但是我希望表C看起来像这样,包含有关LastModifyDate的区别的表A和表B的数据。
我该怎么办? left join
?
注意:我需要将比较结果写到表C中,而不仅仅是查询的结果。
答案 0 :(得分:2)
您可以尝试将Outer JOIN
中的Source_Last_Modify_Date
与{{1}中的tableA
一起使用Source_Last_Modify_Date
。
tbaleb
答案 1 :(得分:0)
听起来像是您需要对我使用MINUS命令。参见http://www.sqltutorial.org/sql-minus/
答案 2 :(得分:0)
由于问题陈述,以上答案仅稍有变化 “表B中可能存在新文件,但表A中存在。”
SELECT b.Source_File_Name,
b.Source_Creation_Date,
a.Source_Last_Modify_Date 'Source_Last_Modify_Date_From_Table_A',
b.Source_Last_Modify_Date 'Source_Last_Modify_Date_From_Table_B'
FROM [Table B] b
LEFT JOIN [Table A] a
ON b.Source_File_Name = a.Source_File_Name
AND b.Source_Creation_Date = a.Source_Creation_Date
AND b.Source_Last_Modify_Date <> a.Source_Last_Modify_Date
可能会有所帮助。
答案 3 :(得分:0)
如果您还要考虑文件删除,则需要一种FULL JOIN
或类似的机制。在FULL JOIN
上进行过滤非常棘手:
SELECT COALESCE(a.Source_File_Name, b.Source_File_Name) as Source_File_Name,
COALESCE(a.Source_Creation_Date, b.Source_Creation_Date) as Source_Creation_Date,
a.Source_Last_Modify_Date as Source_Last_Modify_Date_From_Table_A,
b.Source_Last_Modify_Date as Source_Last_Modify_Date_From_Table_B
FROM [Table B] a FULL JOIN
[Table A] b
ON b.Source_File_Name = a.Source_File_Name AND
b.Source_Creation_Date = a.Source_Creation_Date
WHERE a.Source_File_Name IS NULL OR
b.Source_File_Name IS NULL OR
b.Source_Last_Modify_Date <> a.Source_Last_Modify_Date;