[英]Getting an Error while using EXCEPT clause
Attached above is the question I am trying to solve. 上面所附是我要解决的问题。 As a start, I wanted to try using the EXCEPT clause in SQL, and get all the values that are not present in the Orders table.
首先,我想尝试在SQL中使用EXCEPT子句,并获取Orders表中不存在的所有值。 This is what I am trying: (Ignore the column names and stuff for now, I just want to test the EXCEPT logic)
这就是我要尝试的:(暂时忽略列名和内容,我只想测试EXCEPT逻辑)
SELECT Id, Name FROM Customers
EXCEPT
SELECT O.CustomerId as Id, C.Name AS Name FROM Customers C , Orders O
WHERE C.Id = O.CustomerId
However, I get this error on LeetCode which I am not sure about: 但是,我在LeetCode上收到此错误,我不确定:
Line 3: SyntaxError: near 'SELECT O.CustomerID as Id, C.Name AS Name FROM Customers C , Orders O WHERE C.Id'
The expected output I want out of the query I wrote is: 我想要从我编写的查询中获得的预期输出是:
Id Name
2 Henry
4 Max
EDIT: This is a problem on LeetCode, and after looking which version it uses I found it is mysql-server 5.7.21 编辑:这是在LeetCode上的问题,在查看它使用哪个版本后,我发现它是mysql-server 5.7.21
If you insist on using EXCEPT
, make that EXCEPT ALL
: 如果您坚持使用
EXCEPT
,请将该EXCEPT ALL
:
SELECT Id FROM Customers
EXCEPT ALL
SELECT CustomerID FROM Orders;
But I'd rather use LEFT JOIN / .. IS NULL
: 但是我宁愿使用
LEFT JOIN / .. IS NULL
:
SELECT C.*
FROM Customers C
LEFT JOIN Orders O ON O.CustomerId = C.Id
WHERE O.CustomerId IS NULL;
See: 看到:
I saw your dbms is mysql. 我看到您的dbms是mysql。 Mysql didn't support
EXCEPT
MySQL不支持
EXCEPT
Another way you can try to use NOT IN
will be easier than EXCEPT
您可以尝试使用
NOT IN
另一种方式比EXCEPT
容易
Schema (MySQL v5.7) 模式(MySQL v5.7)
CREATE TABLE Customers(
id int,
Name varchar(50)
);
INSERT INTO Customers VALUES (1,'Joe');
INSERT INTO Customers VALUES (2,'Henry');
INSERT INTO Customers VALUES (3,'Sam');
INSERT INTO Customers VALUES (4,'Max');
CREATE TABLE Orders(
id int,
CustomerId int
);
INSERT INTO Orders VALUES (1,3);
INSERT INTO Orders VALUES (2,1);
Query #1 查询#1
SELECT Id, Name
FROM Customers
WHERE Id NOT IN (
SELECT O.CustomerID
FROM Orders O
);
| Id | Name |
| --- | ----- |
| 2 | Henry |
| 4 | Max |
If your dbms support EXCEPT
,I would use JOIN
instead of ,
to connect two tables because JOIN
have a clearer semantic meaning to connect two tables. 如果您的DBMS支持
EXCEPT
,我会使用JOIN
代替,
连接两个表,因为JOIN
有一个比较清晰的语义来连接两个表。
SELECT Id, Name
FROM Customers
EXCEPT
SELECT O.CustomerID as Id, C.Name AS Name
FROM Customers C JOIN Orders O ON C.Id = O.CustomerID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.