Code:
;WITH
V (ID, EXCID, MEX)
AS (SELECT * FROM (
SELECT 3 AS ID, 3 AS EXCID, 100 AS MEX
UNION ALL
SELECT 3 AS ID, 6 AS EXCID, 200 AS MEX
UNION ALL
SELECT 7 AS ID, 1 AS EXCID, NULL AS MEX
UNION ALL
SELECT 7 AS ID, 3 AS EXCID, 100 AS MEX
UNION ALL
SELECT 7 AS ID, 5 AS EXCID, 200 AS MEX
UNION ALL
SELECT 8 AS ID, 1 AS EXCID, NULL AS MEX
UNION ALL
SELECT 8 AS ID, 5 AS EXCID, 100 AS MEX
UNION ALL
SELECT 8 AS ID, 7 AS EXCID, 200 AS MEX
UNION ALL
SELECT 18 AS ID, 2 AS EXCID, NULL AS MEX
UNION ALL
SELECT 18 AS ID, 3 AS EXCID, 100 AS MEX
UNION ALL
SELECT 18 AS ID, 5 AS EXCID, 200 AS MEX
UNION ALL
SELECT 26 AS ID, 6 AS EXCID, 200 AS MEX
UNION ALL
SELECT 26 AS ID, 7 AS EXCID, 100 AS MEX
UNION ALL
SELECT 26 AS ID, 8 AS EXCID, NULL AS MEX) V)
,
N (ID, EXCID, MEX)
AS (SELECT * FROM (
SELECT 6 AS ID, 1 AS EXCID, NULL AS MEX
UNION ALL
SELECT 9 AS ID, 3 AS EXCID, 100 AS MEX
UNION ALL
SELECT 9 AS ID, 5 AS EXCID, 200 AS MEX
UNION ALL
SELECT 11 AS ID, 2 AS EXCID, NULL AS MEX
UNION ALL
SELECT 13 AS ID, 5 AS EXCID, 200 AS MEX
UNION ALL
SELECT 16 AS ID, 1 AS EXCID, NULL AS MEX
UNION ALL
SELECT 19 AS ID, 2 AS EXCID, NULL AS MEX
UNION ALL
SELECT 19 AS ID, 5 AS EXCID, 200 AS MEX
UNION ALL
SELECT 20 AS ID, 6 AS EXCID, 200 AS MEX
UNION ALL
SELECT 20 AS ID, 7 AS EXCID, 100 AS MEX
UNION ALL
SELECT 21 AS ID, 3 AS EXCID, 100 AS MEX
UNION ALL
SELECT 22 AS ID, 5 AS EXCID, 200 AS MEX
UNION ALL
SELECT 22 AS ID, 7 AS EXCID, 100 AS MEX
UNION ALL
SELECT 23 AS ID, 7 AS EXCID, 100 AS MEX
UNION ALL
SELECT 24 AS ID, 6 AS EXCID, 200 AS MEX
UNION ALL
SELECT 25 AS ID, 1 AS EXCID, NULL AS MEX
UNION ALL
SELECT 25 AS ID, 5 AS EXCID, 200 AS MEX
UNION ALL
SELECT 27 AS ID, 2 AS EXCID, NULL AS MEX
UNION ALL
SELECT 27 AS ID, 6 AS EXCID, 200 AS MEX
UNION ALL
SELECT 29 AS ID, 1 AS EXCID, NULL AS MEX
UNION ALL
SELECT 29 AS ID, 6 AS EXCID, 200 AS MEX
UNION ALL
SELECT 29 AS ID, 7 AS EXCID, 100 AS MEX) N)
,
M (ID, EXCID1, EXCID2)
AS (SELECT * FROM (
SELECT 100 AS ID, 3 AS EXCID1, 7 AS EXCID2
UNION ALL
SELECT 200 AS ID, 5 AS EXCID1, 6 AS EXCID2 ) M)
-- All Above Same
,
SAFE_N (ID, EXCID, MEX)
AS (SELECT ID, EXCID, MEX FROM N WHERE ID IN (SELECT DISTINCT ID FROM N WHERE MEX IS NULL))
,
UNSAFE_N (ID, EXCID, MEX)
AS (SELECT ID, EXCID, MEX FROM N WHERE ID NOT IN (SELECT DISTINCT ID FROM SAFE_N))
,
OK_N_ID (ID, EXCID, MEX)
AS (SELECT DISTINCT UNSAFE_N.ID, UNSAFE_N.EXCID, UNSAFE_N.MEX FROM V JOIN UNSAFE_N ON (UNSAFE_N.MEX=V.MEX AND V.EXCID=UNSAFE_N.EXCID))
,
OK_N (ID, EXCID, MEX)
AS (SELECT * FROM N WHERE ID NOT IN (SELECT ID FROM OK_N_ID))
SELECT V.ID, SAFE_N.ID FROM V CROSS JOIN SAFE_N
GROUP BY V.ID, SAFE_N.ID
Bookmarks