Please see:
http://sqlfiddle.com/#!18/479d1
I have these tables:
CREATE TABLE Item
(
OrderNo varchar(10),
ItemNo varchar(10)
);
CREATE TABLE Order1
(
OrderNo varchar(10),
Month varchar(10)
);
INSERT INTO Item (OrderNo, ItemNo)
VALUES ('111','222'), ('111','333'),
('333','444'), ('333','222'), ('333','555'),
('444','222'), ('444','555');
INSERT INTO Order1 (OrderNo, Month)
VALUES ('111','Feb'), ('333', 'Jan'), ('444', 'May');
I am looking to return orders which don't have the item '555'
. I figured this would be a subquery, but I just cant seem to get it right.
I have tried:
SELECT
O.[OrderNo],
O.[Month],
I.[ItemNo]
FROM
Order1 O
JOIN
Item I ON O.[OrderNo] = I.[OrderNo]
WHERE
O.[OrderNo] IN (SELECT I.[OrderNo]
FROM Item I
GROUP BY I.[OrderNo], I.[ItemNo]
HAVING I.[ItemNo] <> '555')
Which returns this result:
| OrderNo | Month | ItemNo | |---------|-------|--------| | 111 | Feb | 222 | | 111 | Feb | 333 | | 333 | Jan | 444 | | 333 | Jan | 222 | | 333 | Jan | 555 | | 444 | May | 222 | | 444 | May | 555 |
But in this case I want to remove all orders with item '555'
, so a result that looks like:
| OrderNo | Month | ItemNo | |---------|-------|--------| | 111 | Feb | 222 | | 111 | Feb | 333 |