在W3Schools测试库中按条件为ProductName添加星号的SQL方案
解决方案
导致报错的原因有两个,针对W3Schools测试数据库使用的Access SQL方言调整即可:
- Access SQL不支持标准SQL的
CASE WHEN语法,需要使用内置的IIF()函数实现分支逻辑 - Access中字符串拼接必须用
&运算符,+仅用于数值运算,用+拼接字符串会引发类型不匹配错误
修改后的完整SQL语句:
SELECT IIF(Orders.ShipperID = 2, Products.ProductName & '*', Products.ProductName) AS ProductName, (Products.Price * OrderDetails.Quantity) AS TotalValue, Orders.OrderDate FROM ((OrderDetails INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID) INNER JOIN Orders ON OrderDetails.OrderID = Orders.OrderID) WHERE OrderDetails.ProductID IN (19, 20, 21, 68) AND Orders.OrderDate <= #12/31/1996#;
核心调整点
- 替换
CASE为IIF:IIF(判断条件, 满足条件的返回值, 不满足条件的返回值)是Access SQL的分支判断写法 - 替换
+为&:用&连接字符串和星号,确保文本能正确拼接,避免类型错误
内容的提问来源于stack exchange,提问作者Vadim Katsemba
相关产品推荐
相关产品推荐

