'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