Попытка объединить следующие два запроса, которые включают отрицания и заканчивают тем, что также удаляли необходимые строки.Если запустить их отдельно с помощью MINUS, я получу требуемый результат.
SELECT *
FROM table1 t1
WHERE t1.b_c IN ('A', 'B') AND t1.d_id IN ('2', '3')
AND ( (t1.a_d >= '1-May-2018'AND t1.a_d <= '15-May-2018')
OR (t1.a_r >= '1-May-2018' AND t1.a_r <= '15-May-2018'))
AND ( t1.a_m = 'AC'
AND t1.s = 'SW'
AND t1.c_m IN ('DM', 'SW')
AND t1.d_m IN ('DM', 'SW')
OR ((t1.a_m = 'NO' AND t1.s = 'SW')
AND ( (t1.d_m = 'DM' AND t1.c_m = 'DM')
OR (t1.d_m = 'SW' AND t1.c_m = 'DM')
OR NOT (t1.d_m = 'DM' AND t1.c_m = 'SW')
OR (t1.d_m = 'SW' AND t1.c_m = 'SW'))))
AND ( (t1.a_m,t1.s,t1.d_m,t1.c_m,t1.d_s) NOT IN
( ('NO', 'SW', 'SW', 'DM', 'X001'),
('NO', 'SW', 'SW', 'DM', 'XXXX')))
MINUS
(SELECT *
FROM table1 t1
WHERE t1.b_c IN ('A', 'B') AND t1.d_id IN ('2', '3')
AND ( (t1.a_d >= '1-May-2018' AND t1.a_d <= '15-May-2018')
OR (t1.a_r >= '1-May-2018' AND t1.a_r <= '15-May-2018'))
AND t1.dept_id IN ('20', '35')
AND t1.a_m IN ('AC', 'NO')
AND t1.s = 'SW'
AND t1.c_m = 'DM'
AND t1.d_m IN ('DM', 'SW')
AND ((t1.o_b = 'X001' AND t1.s_s = 'X001' ) OR (t1.o_b = 'XXXX' AND t1.s_s = 'XXXX'))
AND REGEXP_LIKE (t1.r_no, '^(20PS|35RE)'))
Комбинированный запрос:
SELECT *
FROM table1 t1
WHERE t1.b_c IN ('A', 'B') AND t1.d_id IN ('2', '3')
AND ( (t1.a_d >= '1-May-2018' AND t1.a_d <= '15-May-2018')
OR (t1.a_r >= '1-May-2018' AND t1.a_r <= '15-May-2018'))
AND t1.a_m IN ('AC', 'NO')
AND t1.s = 'SW'
AND t1.c_m IN ('DM', 'SW')
AND t1.d_m IN ('DM', 'SW')
AND (NOT ( ( (t1.a_m, t1.s, t1.d_m, t1.c_m, t1.d_s) IN
( ('NO', 'SW', 'SW', 'DM', 'X001'),
('NO', 'SW', 'SW', 'DM', 'XXXX')))
OR ( (t1.s, t1.d_m, t1.c_m) IN ( ('SW', 'DM', 'SW')))
OR ( ( (t1.a_m, t1.s, t1.d_m, t1.c_m, t1.o_b, t1.b_b, t1.s_s) IN
( ('AC', 'SW', 'DM', 'DM', 'XXXX', 'X001', 'XXXX'),
('AC', 'SW', 'DM', 'DM', 'X001', 'XXXX', 'X001'))
AND REGEXP_LIKE (t1.r_no, '^(20PS|35RE)')))))
Когда я запустил комбинированный запрос, следующая требуемая строка была удалена.
t1.a_m t1.s t1.d_m t1.c_m t1.o_b t1.b_b t1.s_s t1.r_no
AC SW DM DM 35REXXXX
Пожалуйста, дайте мне знать, где я допустил ошибку.