我尝试了这个查询,但我无法让它工作:
它说EXISTS附近有语法错误。
SELECT *
FROM Customers
WHERE CustomerID EXIST IN (SELECT *, CustomerID FROM Orders);
提前致谢。
答案 0 :(得分:2)
错误是对的。您甚至在问题中写了Exists
,但在示例代码中您编写了exist
,最后没有s
。有关正确的语法,请参阅here
您需要将外部查询与exists
中的子查询相关联。您选择的列无关紧要,因为规则不允许对它们进行评估(即select *
没问题)
SELECT *
FROM Customers C
WHERE EXISTS (SELECT * FROM Orders where Orders.CustomerID = C.CustomerID);
答案 1 :(得分:1)
尝试这样的事情:
SELECT * FROM Customers WHERE CustomerID IN (SELECT CustomerID FROM Orders);
答案 2 :(得分:1)
为什么不使用JOIN
?
SELECT
Customers.*
FROM
Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
如果您确实想使用EXSITS
,语法如下:
SELECT
Customers.*
FROM
Customers
WHERE
EXISTS (SELECT * FROM Orders WHERE Customers.CustomerID = Orders.CustomerID);
使用IN
进行衡量:
SELECT
Customers.*
FROM
Customers
WHERE
CustomerID IN (SELECT Orders.CustomerID FROM Orders);
如果您使用的是MySQL,我建议您使用EXPLAIN
语句运行全部3,以便了解它们之间的区别。
答案 3 :(得分:1)
这是正确存在的语法,性能明智,这比IN语句好很多。
SELECT *
FROM Customers c
WHERE EXISTS
(SELECT 'X' FROM Orders o WHERE o.CustomerID = c.CustomerID);