SQL 服务器:列出表之间的差异
SQL Server: Listing Differences Between Tables
多年来有一些类似的话题与此有关,但我还没有找到或无法做我正在寻找的事情。
我目前有两个表,它们具有我通过脚本生成的相同架构。为了命名,一个是 "results_prior",另一个是 "results_current"。这个新查询最好每月 运行 一次,看看是否有任何差异。示例:
TABLE: results_prior
----------------------------------------
| ID | ENVIRONMENT | EDITION | CONTACT |
----------------------------------------
| 03 | Development | 2008 | Bob |
----------------------------------------
| 05 | Production | 2012 | Phil |
----------------------------------------
| 09 | Development | 2008 | Erik |
----------------------------------------
| 13 | Production | 2012 | Ashley |
----------------------------------------
| 22 | Production | 2012 | Erik |
----------------------------------------
TABLE: results_current
----------------------------------------
| ID | ENVIRONMENT | EDITION | CONTACT |
----------------------------------------
| 03 | Development | 2008 | Bob |
----------------------------------------
| 05 | Production | 2012 | Phil |
----------------------------------------
| 22 | Production | 2012 | Erik |
----------------------------------------
两者比较时,结果应该是:
----------------------------------------
| ID | ENVIRONMENT | EDITION | CONTACT |
----------------------------------------
| 09 | Development | 2008 | Erik |
----------------------------------------
| 13 | Production | 2012 | Ashley |
----------------------------------------
因为 09 和 13 在 results_current。同样,这可能是棘手的部分,如果 results_current 的结果多于 results_prior,则执行相同的操作。所以,反之亦然。
抱歉,我没有可用的示例代码。在过去的几个小时里,我一直在使用 UNION、JOIN 和 EXCEPT,我觉得我的逻辑(同样,在 SQL 服务器中)没有任何意义。如有任何帮助,我们将不胜感激。
这可以看作是A-B union B-A
的结果集。我假设 tables.Hence 和 select
中的 *
中的所有列都相同。
(select * from results_prior
except
select * from results_current)
union all
(select * from results_current
except
select * from results_prior)
我会尝试大致类似于此的操作:
SELECT ID, ENVIRONMENT, EDITION, CONTACT FROM RESULTS_PRIOR
WHERE ID NOT IN (SELECT ID FROM RESULTS_CURRENT)
UNION
SELECT ID, ENVIRONMENT, EDITION, CONTACT FROM RESULTS_CURRENT
WHERE ID NOT IN (SELECT ID FROM RESULTS_PRIOR)
多年来有一些类似的话题与此有关,但我还没有找到或无法做我正在寻找的事情。
我目前有两个表,它们具有我通过脚本生成的相同架构。为了命名,一个是 "results_prior",另一个是 "results_current"。这个新查询最好每月 运行 一次,看看是否有任何差异。示例:
TABLE: results_prior
----------------------------------------
| ID | ENVIRONMENT | EDITION | CONTACT |
----------------------------------------
| 03 | Development | 2008 | Bob |
----------------------------------------
| 05 | Production | 2012 | Phil |
----------------------------------------
| 09 | Development | 2008 | Erik |
----------------------------------------
| 13 | Production | 2012 | Ashley |
----------------------------------------
| 22 | Production | 2012 | Erik |
----------------------------------------
TABLE: results_current
----------------------------------------
| ID | ENVIRONMENT | EDITION | CONTACT |
----------------------------------------
| 03 | Development | 2008 | Bob |
----------------------------------------
| 05 | Production | 2012 | Phil |
----------------------------------------
| 22 | Production | 2012 | Erik |
----------------------------------------
两者比较时,结果应该是:
----------------------------------------
| ID | ENVIRONMENT | EDITION | CONTACT |
----------------------------------------
| 09 | Development | 2008 | Erik |
----------------------------------------
| 13 | Production | 2012 | Ashley |
----------------------------------------
因为 09 和 13 在 results_current。同样,这可能是棘手的部分,如果 results_current 的结果多于 results_prior,则执行相同的操作。所以,反之亦然。
抱歉,我没有可用的示例代码。在过去的几个小时里,我一直在使用 UNION、JOIN 和 EXCEPT,我觉得我的逻辑(同样,在 SQL 服务器中)没有任何意义。如有任何帮助,我们将不胜感激。
这可以看作是A-B union B-A
的结果集。我假设 tables.Hence 和 select
中的 *
中的所有列都相同。
(select * from results_prior
except
select * from results_current)
union all
(select * from results_current
except
select * from results_prior)
我会尝试大致类似于此的操作:
SELECT ID, ENVIRONMENT, EDITION, CONTACT FROM RESULTS_PRIOR
WHERE ID NOT IN (SELECT ID FROM RESULTS_CURRENT)
UNION
SELECT ID, ENVIRONMENT, EDITION, CONTACT FROM RESULTS_CURRENT
WHERE ID NOT IN (SELECT ID FROM RESULTS_PRIOR)