Reputation: 73
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
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