Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>An empty set <code>INTERSECT</code>ed with any other set will always be empty. It's like multiplying by 0. You always get 0.</p> <p>Conditional <code>INTERSECT</code>ing will require either a dynamic query, or a staging table, like this:</p> <p><strong>Initializations</strong></p> <pre><code>DECLARE @CAN_USE_TABLE1 BIT DECLARE @CAN_USE_TABLE2 BIT DECLARE @CAN_USE_TABLE3 BIT DECLARE @CAN_USE_TABLE4 BIT DECLARE @TABLE1 AS TABLE ( ABC INT ) DECLARE @TABLE2 AS TABLE ( ABC INT ) DECLARE @TABLE3 AS TABLE ( ABC INT ) DECLARE @TABLE4 AS TABLE ( ABC INT ) DECLARE @RESULT AS TABLE ( ABC INT ) --Adding this result table INSERT INTO @TABLE1 VALUES (1) INSERT INTO @TABLE1 VALUES (2) INSERT INTO @TABLE1 VALUES (3) INSERT INTO @TABLE2 VALUES (1) INSERT INTO @TABLE2 VALUES (2) SET @CAN_USE_TABLE1 = 1 SET @CAN_USE_TABLE2 = 1 SET @CAN_USE_TABLE3 = 0 SET @CAN_USE_TABLE4 = 0 </code></pre> <p><strong>Processing</strong></p> <pre><code>INSERT INTO @RESULT SELECT ABC FROM @TABLE1 WHERE @CAN_USE_TABLE1=1 UNION SELECT ABC FROM @TABLE2 WHERE @CAN_USE_TABLE2=1 UNION SELECT ABC FROM @TABLE3 WHERE @CAN_USE_TABLE3=1 UNION SELECT ABC FROM @TABLE4 WHERE @CAN_USE_TABLE4=1 DELETE r FROM @RESULT r WHERE NOT EXISTS(SELECT 1 FROM @TABLE1 WHERE ABC=r.ABC) AND @CAN_USE_TABLE1=1; DELETE r FROM @RESULT r WHERE NOT EXISTS(SELECT 1 FROM @TABLE2 WHERE ABC=r.ABC) AND @CAN_USE_TABLE2=1; DELETE r FROM @RESULT r WHERE NOT EXISTS(SELECT 1 FROM @TABLE3 WHERE ABC=r.ABC) AND @CAN_USE_TABLE3=1; DELETE r FROM @RESULT r WHERE NOT EXISTS(SELECT 1 FROM @TABLE4 WHERE ABC=r.ABC) AND @CAN_USE_TABLE4=1; SELECT * FROM @RESULT; </code></pre> <p><strong>Result</strong></p> <pre><code>1 2 </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload