首页 > 解决方案 > 为什么在嵌套查询中创建别名时出现语法错误?

问题描述

SELECT customers.Name
FROM 
    (SELECT *
     FROM customers AS c
     INNER JOIN orders AS o
     ON c.Id=o.CustomerId) AS co
WHERE customers.Name NOT IN co; #Syntax error: co

19:21:06 错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行 0.000 秒的“co”附近使用正确的语法

谢谢!

标签: mysqlsql

解决方案


IN()NOT IN()谓词必须有一个带括号的值或子查询列表。您的谓词中没有任何括号。

此外,即使您有括号,也无法将列与这样的别名进行比较。在 WHERE 子句的上下文中,列是标量,而别名是一组列。

我猜你正在寻找没有订单的客户。这里有两种方法:

SELECT c.Name
FROM customers AS c
WHERE c.Id NOT IN (SELECT CustomerId FROM orders);

或者:

SELECT c.Name
FROM customers AS c
LEFT OUTER JOIN orders AS o ON c.Id=o.CustomerId
WHERE o.CustomerId IS NULL;

推荐阅读