[英]Getting an Error while using EXCEPT clause
上面所附是我要解决的问题。 首先,我想尝试在SQL中使用EXCEPT子句,并获取Orders表中不存在的所有值。 这就是我要尝试的:(暂时忽略列名和内容,我只想测试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
但是,我在LeetCode上收到此错误,我不确定:
Line 3: SyntaxError: near 'SELECT O.CustomerID as Id, C.Name AS Name FROM Customers C , Orders O WHERE C.Id'
我想要从我编写的查询中获得的预期输出是:
Id Name
2 Henry
4 Max
编辑:这是在LeetCode上的问题,在查看它使用哪个版本后,我发现它是mysql-server 5.7.21
如果您坚持使用EXCEPT
,请将该EXCEPT ALL
:
SELECT Id FROM Customers
EXCEPT ALL
SELECT CustomerID FROM Orders;
但是我宁愿使用LEFT JOIN / .. IS NULL
:
SELECT C.*
FROM Customers C
LEFT JOIN Orders O ON O.CustomerId = C.Id
WHERE O.CustomerId IS NULL;
看到:
我看到您的dbms是mysql。 MySQL不支持EXCEPT
您可以尝试使用NOT IN
另一种方式比EXCEPT
容易
模式(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);
查询#1
SELECT Id, Name
FROM Customers
WHERE Id NOT IN (
SELECT O.CustomerID
FROM Orders O
);
| Id | Name |
| --- | ----- |
| 2 | Henry |
| 4 | Max |
如果您的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.