mysql - 为什么在嵌套查询中创建别名时出现语法错误?
问题描述
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”附近使用正确的语法
谢谢!
解决方案
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;
推荐阅读
- c - 在 c 中打印从 100 到 10000 的 amstrong no
- javascript - Safari 12.0.3 下载属性不起作用
- html - Angular Material - mat-select:自定义填充溢出父元素
- javascript - 无法使用 jquery 更新所有表行
- c# - 较旧的 SQLite DB + BOOL + DB 浏览器怪异
- r - 如何计算除 MNIST 以外的更大数据集的 RBM 精度以及 R Studio 中的简单编码是什么?
- r - 控制在小标题中显示的小数位。了解pillar.sigfig 的作用
- sql-server - 事务日志还原:无法在数据库中更新系统对象,因为它是只读的
- javascript - 与地图操作员反应的数据操作问题?
- azure-cosmosdb - 局域网上的 Azure Cosmos DB 模拟器