为什么在嵌套查询中生成别名时出现语法错误?

ttcibm8c  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(351)
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语法有错误;在第70.000行的“co”附近检查与mysql服务器版本相对应的手册,以获得正确的语法
谢谢您!

lqfhib0f

lqfhib0f1#

IN() 或者 NOT IN() predicate 必须具有带圆括号的值或子查询列表。你的 predicate 中没有paren。
而且,即使有paren,也不能将列与这样的别名进行比较。在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;
irlmq6kh

irlmq6kh2#

也许你想得到那些没有下订单的客户的名字
而不是将联接查询放在 NOT IN 你放在后面的接线员 FROM .
如果是这种情况,请使用:

SELECT Name
FROM customers
WHERE Name NOT IN (
  SELECT c.Name
  FROM customers AS c
  INNER JOIN orders AS o
  ON c.Id=o.CustomerId
)

相关问题