'Is is possible to have a nested OR condition inside EXISTS?
I'm in the process of getting data from a table where the condition must be "Table1 AND (Table2 OR Table3 OR Table4)".
Here is my current query without the needed condition:
SELECT TOP 1000 P.RId
FROM dbo.PD P
WHERE EXISTS (
SELECT TOP 1 1
FROM dbo.PTB PB
INNER JOIN dbo.PTBI I on I.PTBId = PB.PTBId
WHERE PB.RId = P.RId
) AND EXISTS (
SELECT TOP 1 1
FROM dbo.AAD AB
INNER JOIN dbo.CPD CP ON CP.RId = P.RId AND CP.CId = AB.CId
INNER JOIN dbo.Cl C on C.CltId = CP.ClId
)
AND EXISTS (
SELECT TOP 1 1
FROM dbo.AD A
INNER JOIN dbo.CPD CP ON CP.RId = A.RId AND CP.CId = A.CId AND A.RId = P.RId
INNER JOIN dbo.Cl C ON C.ClId = CP.ClId
)
AND EXISTS (
SELECT TOP 1 1
FROM dbo.AAD AB
INNER JOIN dbo.CPD CP ON CP.RId = P.RId AND CP.CId = AB.CId
INNER JOIN dbo.Cl C ON C.ClId = CP.ClId
)
The 2nd, 3rd, and 4th EXISTS condition in the query must be "(Table2 OR Table3 OR Table4)" condition. I don't how to implement this logic in SQL maybe someone could help?
Thank you.
Solution 1:[1]
Just OR together the last 3 EXISTS conditions:
SELECT TOP 1000 P.RId
FROM dbo.PD P
WHERE EXISTS (
SELECT 1
FROM dbo.PTB PB
INNER JOIN dbo.PTBI I ON I.PTBId = PB.PTBId
WHERE PB.RId = P.RId
) AND (
EXISTS (
SELECT 1
FROM dbo.AAD AB
INNER JOIN dbo.CPD CP ON CP.RId = P.RId AND CP.CId = AB.CId
INNER JOIN dbo.Cl C on C.CltId = CP.ClId
) OR
EXISTS (
SELECT 1
FROM dbo.AD A
INNER JOIN dbo.CPD CP ON CP.RId = A.RId AND CP.CId = A.CId AND A.RId = P.RId
INNER JOIN dbo.Cl C ON C.ClId = CP.ClId
) OR
EXISTS (
SELECT 1
FROM dbo.AAD AB
INNER JOIN dbo.CPD CP ON CP.RId = P.RId AND CP.CId = AB.CId
INNER JOIN dbo.Cl C ON C.ClId = CP.ClId
)
);
-- ORDER BY clause goes here
Note that using TOP in the outer query without using ORDER BY does not make much sense. In the inner exists queries, there is no point to using TOP.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Tim Biegeleisen |
