patternsqlModerate
T-SQL MINUS operator
Viewed 0 times
sqlminusoperator
Problem
These are the tables I have created and inserted values in it:
In order to display customer names who did not purchase any DVD by using MINUS operator, this is what I have tried:
And I'm getting the following error message:
Msg 156, Level 15, State 1, Line 123 Incorrect syntax near the
CREATE TABLE Customer
(Customer_No INTEGER IDENTITY (1,1) PRIMARY KEY,
Customer_Name VARCHAR(30) NOT NULL
)
CREATE TABLE DVD
(DVD_No INTEGER IDENTITY (1,1) PRIMARY KEY,
DVD_Name VARCHAR(30)
)
CREATE TABLE DVD_Purchase
(DVD_Purchase_No INTEGER IDENTITY (1,1) PRIMARY KEY,
DVD_No INTEGER NOT NULL,
Customer_No INTEGER NOT NULL
)
INSERT INTO Customer (Customer_Name)
VALUES('Daman')
INSERT INTO Customer (Customer_Name)
VALUES('Saif')
INSERT INTO Customer (Customer_Name)
VALUES('Gurung')
INSERT INTO Customer (Customer_Name)
VALUES('Upendra')
INSERT INTO Customer (Customer_Name)
VALUES('Ornob')
INSERT INTO DVD (DVD_Name)
VALUES('Bleach')
INSERT INTO DVD (DVD_Name)
VALUES('Gintama')
INSERT INTO DVD (DVD_Name)
VALUES('Tokyo Ghoul')
INSERT INTO DVD (DVD_Name)
VALUES('Death Note')
INSERT INTO DVD (DVD_Name)
VALUES('Rurouni Kenshin')
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (4,1)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (1,2)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (1,3)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (2,3)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (3,3)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (4,3)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (1,4)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (2,4)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (5,1)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (5,2)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (5,3)
INSERT INTO DVD_Purchase (DVD_No,Customer_No)
VALUES (5,4)In order to display customer names who did not purchase any DVD by using MINUS operator, this is what I have tried:
SELECT Customer_Name
FROM Customer
WHERE Customer_No
IN
(SELECT Customer_No FROM Customer
MINUS
SELECT Customer_No FROM DVD_Purchase
)And I'm getting the following error message:
Msg 156, Level 15, State 1, Line 123 Incorrect syntax near the
Solution
MINUS is a name for the "set difference" operator that is used only by Oracle. SQL Server uses the (standard) name,
EXCEPT, for this operator. Replacing the MINUS with EXCEPT will solve the issue:SELECT Customer_Name
FROM Customer
WHERE Customer_No
IN
(SELECT Customer_No FROM Customer
EXCEPT
SELECT Customer_No FROM DVD_Purchase
) ;By the way, since the external query and the subquery reference the same table+column (
Customer . Customer_No) you could use NOT IN without EXCEPT. Assuming that the columns involved (Customer_No) are not nullable, this is equivalent:SELECT Customer_Name
FROM Customer
WHERE Customer_No
NOT IN
(SELECT Customer_No FROM DVD_Purchase
) ;Code Snippets
SELECT Customer_Name
FROM Customer
WHERE Customer_No
IN
(SELECT Customer_No FROM Customer
EXCEPT
SELECT Customer_No FROM DVD_Purchase
) ;SELECT Customer_Name
FROM Customer
WHERE Customer_No
NOT IN
(SELECT Customer_No FROM DVD_Purchase
) ;Context
StackExchange Database Administrators Q#184478, answer score: 12
Revisions (0)
No revisions yet.