M.TwT
M.TwT

Reputation: 73

How to improve SELECT statements with multiple sub-queries

How can I better improve the following SQL statements? I have tried using EXCEPT but it does not work. Any suggestions/advice are greatly welcome!

SELECT COUNT(*)
FROM ( SELECT L_ORDERKEY, COUNT(*)
   FROM LINEITEM
   GROUP BY L_ORDERKEY
   HAVING COUNT(*) > (SELECT DISTINCT TSIZE
                      FROM LINEITEM) );


SELECT LINEITEM.L_ORDERKEY, LINEITEM.L_LINENUMBER
FROM LINEITEM JOIN PART
   ON LINEITEM.L_PARTKEY = PART.P_PARTKEY
WHERE PART.P_PARTKEY IN (46557,20193,19110,45690,45123)
   MINUS
      (SELECT LINEITEM.L_ORDERKEY, LINEITEM.L_LINENUMBER
       FROM LINEITEM JOIN PART
          ON LINEITEM.L_PARTKEY = PART.P_PARTKEY
       WHERE PART.P_PARTKEY IN (46557,20193,19110,45690,45123)
       MINUS
       SELECT LINEITEM.L_ORDERKEY, LINEITEM.L_LINENUMBER
       FROM LINEITEM JOIN SUPPLIER
          ON LINEITEM.L_SUPPKEY = SUPPLIER.S_SUPPKEY
       WHERE SUPPLIER.S_SUPPKEY IN (4567,2323,1987,2194,1111)
      );

Upvotes: 0

Views: 54

Answers (1)

Barbaros Özhan
Barbaros Özhan

Reputation: 65218

You can use not exists for the second query

   SELECT L.L_ORDERKEY, L.L_LINENUMBER
     FROM LINEITEM L
     JOIN PART P
       ON L.L_PARTKEY = P.P_PARTKEY
    WHERE P.P_PARTKEY IN (46557, 20193, 19110, 45690, 45123)
      AND NOT EXISTS
         (SELECT 0
            FROM SUPPLIER S
           WHERE S.S_SUPPKEY IN (4567, 2323, 1987, 2194, 1111)
             AND L.L_SUPPKEY = S.S_SUPPKEY );

Upvotes: 1

Related Questions