【问题标题】:Save a Select/Except Union into a Temp Table将选择/排除联合保存到临时表中
【发布时间】:2021-12-13 03:12:07
【问题描述】:

这段代码正是我想要的:找到两个表之间的差异,包括空值,并返回它们。感谢:sql query to return differences between two tables

(
    SELECT * FROM table1
    EXCEPT
    SELECT * FROM table2
)  
UNION ALL
(
    SELECT * FROM table2
    EXCEPT
    SELECT * FROM table1
) 

我无法将其转换为临时表(甚至是常规表)以存储其结果以供以后使用。有没有办法可以在这里添加INSERT INTO 或从这个漂亮的查询中生成一个临时表?

【问题讨论】:

  • 请不要将您的答案添加到您的问题中。我已经回滚了。

标签: sql sql-server tsql


【解决方案1】:

从您现有的查询中选择INTO您选择的临时表作为子查询。

SELECT *
INTO #temp1
FROM (
    (
        SELECT * FROM @table1
        EXCEPT
        SELECT * FROM @table2
    )  
    UNION ALL
    (
        SELECT * FROM @table2
        EXCEPT
        SELECT * FROM @table1
    )
) X

【讨论】:

  • 这很接近,但也许未分离的 UNION ALL 会导致插入零行。它不是对 select / except 查询的完整捕获。编辑:玩完括号后,这可行,但 UNION ALL 不能位于两者的中间。它需要分离!
  • @JohnStud 不明白你的意思,这个语法将你现有查询的结果插入到临时表中。如果结果不是您想要的,那是由于您现有的查询。与往常一样,需要minimal reproducible example 提供样本数据和所需结果,以便提供所需的解决方案。
  • @JohnStud 我已经添加了您所说的更改,使其按您的意愿工作,因为没有样本数据我无法对其进行测试。请随时接受。
  • 不带括号的含义不同,由于操作顺序dbfiddle.uk/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多