0

当确认转向存储过程不会破坏其预期功能时(数据从 A 点到达 B 点),我经常使用MINUSEXCEPT在 sql server 中)。但是,这迫使我运行每个查询两次(因为减号返回存在于第一个/顶部表中但不存在于第二个/底部表中的行):

SELECT value1, value2, value3 FROM table1 WHERE uploadID = 'beforeTurning'
MINUS
SELECT value1, value2, value3 FROM table1 WHERE uploadID = 'afterTurning';

SELECT value1, value2, value3 FROM table1 WHERE uploadID = 'afterTurning'
MINUS
SELECT value1, value2, value3 FROM table1 WHERE uploadID = 'beforeTruning';

我可以用一个查询完成同样的事情吗?我该怎么做?

4

2 回答 2

1
SELECT 
  value1, value2, value3,
  sum(decode(uploadID, 'afterTurning', 1, 'beforeTurning', -1)) AS diff
FROM table1 
GROUP BY value1, value2, value3
HAVING sum(decode(uploadID, 'afterTurning', 1, 'beforeTurning', -1)) <> 0
于 2013-06-18T17:08:33.757 回答
0

这是一种方法:

WITH
  BeforeAfter AS (
    SELECT * FROM table1 WHERE uploadID = 'beforeTunning'
    MINUS SELECT * FROM table1 WHERE uploadID = 'afterTunning'),
  AfterBefore AS (
    SELECT * FROM table1 WHERE uploadID = 'afterTunning'
    MINUS SELECT * FROM table1 WHERE uploadID = 'beforeTunning')
SELECT * FROM BeforeAfter
UNION ALL SELECT * FROM AfterBefore

AUNION可能比UNION ALL你的电话更适合你。

于 2013-06-18T16:54:44.550 回答