0

ストアド プロシージャに切り替えても意図した機能が損なわれないことを確認するとき (ポイント A からポイント B に到達するデータ)、私はよくMINUS( EXCEPTin sql server) を使用します。ただし、これにより、各クエリを2回実行する必要があります(マイナスは、2番目/下部には存在しない最初/上部のテーブルに存在する行を返すため):

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';

1 つのクエリで同じことを達成できますか? どうすればいいですか?

4

2 に答える 2

0

1 つの方法を次に示します。

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

Aよりも A のUNION方が適している場合がUNION ALLあります。

于 2013-06-18T16:54:44.550 に答える