EXIST与ANY的SQL语句问题求助:改写后的语句为何报错?
问题原因及解决办法
核心问题:列名大小写不匹配
看你原语句里的关联条件是Products.SupplierID = Suppliers.supplierID,这里Suppliers表的供应商ID列名是小写s开头的supplierID,但改写后的语句里写的是WHERE SupplierID = ANY(...)。如果你的数据库是区分大小写的(比如PostgreSQL默认开启大小写敏感,或者表列名创建时用双引号限定过),那么SupplierID(大写S开头)和supplierID(小写s开头)会被识别成两个不同的列,数据库找不到SupplierID列就会直接报错。
语法兼容性优化建议
虽然标准SQL中= ANY(子查询)和IN(子查询)逻辑等价,但部分数据库对ANY的语法支持有细节限制,用IN替代= ANY的写法兼容性更好,也更直观:
修正后的两种可用写法
写法一:修正列名大小写的= ANY版本
SELECT SupplierName FROM Suppliers WHERE supplierID = ANY (SELECT SupplierID FROM Products WHERE Price < 20);
写法二:更通用的IN版本
SELECT SupplierName FROM Suppliers WHERE supplierID IN (SELECT SupplierID FROM Products WHERE Price < 20);
内容的提问来源于stack exchange,提问作者Xingui Li
相关产品推荐
相关产品推荐

