Skip to content Skip to sidebar Skip to footer

Converting From Not Exists To Not In

I have three tables: sailor (sname, rating); boat (bname, color, rating); reservation (sname, bname, weekday, start, finish); In order to get a list of sailors who have re

Solution 1:

This is funny; you can maintain the syntactic structure (correlated subqueries) while replacing NOT EXISTS ( ... ) by IN ( ...) :

SELECT s.sname from sailor s
WHERE13NOTIN (
    SELECT13FROM boat b
    WHERE b.color ='red'AND42NOTIN (
        SELECT42from reservation r
        WHERE r.bname = b.bname
        AND r.sname = s.sname
       )
    );

Solution 2:

Inorder to get a list of sailors who have reserved every boat. I'll use this script

Solution 1:

 ;WITH k AS 
    (
    SELECT b.sname,COUNT(distinct a.bname) coun FROM boat a
    INNER JOIN reservation b 
        on a.bname = b.bname
    GROUPBY b.sname
    )
    SELECT k.sname FROM k WHERE coun = (select COUNT(*) FROM boat AS b)

Solution 2:

SELECT s.sname
FROM   sailor AS s
WHERE  s.sname NOTIN (SELECTDISTINCT a.sname
                       FROM   (SELECT s.sname,
                                      b.bname
                               FROM   sailor AS s
                                      CROSS JOIN boat AS b
                               WHERE  b.color = "Red") a
                       WHERE  a.sname + a.bname 
                                            NOTIN (SELECT r.sname + r.bname
                                                    FROM   reservation AS r
                                                    WHERE  r.sname ISNOT NULL
                                                            AND r.bname ISNOT NULL));

Post a Comment for "Converting From Not Exists To Not In"