EXISTS查询无法正常工作。语法错误

时间:2014-05-14 22:12:15

标签: sql exists

我尝试了这个查询,但我无法让它工作:

它说EXISTS附近有语法错误。

SELECT * 
FROM Customers 
WHERE CustomerID EXIST IN (SELECT *, CustomerID FROM Orders);

提前致谢。

4 个答案:

答案 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);