繁体   English   中英

使用EXCEPT子句时出现错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM