简体   繁体   English

使用EXCEPT子句时出现错误

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

View on DB Fiddle 在数据库小提琴上查看

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.

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