簡體   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