SQL CASE WHEN问题,查询根本没有运行

时间:2013-11-28 19:22:25

标签: mysql sql case case-when

我有一个零售场景的小型数据库,在此我有一个名为“Dispatched”的字段,这是一个bool,用于指示该项目是否已被分派。这当然是1和0,我尝试了一个简单的CASE WHEN,将1显示为是,0为否。

我的完整查询是:

SELECT 
orders.OrdersID, 
stock.ItemName, 
basket.Quantity, 
customer.FirstName, 
customer.LastName, 
address.AddressLine1, 
address.AddressLine2, 
address.TownOrCity, 
address.Postcode, 
address.Country, 
CASE WHEN basket.Dispatched = 1 THEN 'Yes' ELSE 'No' END AS basket.Dispatched 
FROM orders
JOIN OrdersBasketJoin ON orders.OrdersID = OrdersBasketJoin.OrdersID
LEFT JOIN basket ON OrdersBasketJoin.BasketID = basket.BasketID
JOIN customer ON orders.CustomerID = customer.CustomerID
JOIN address ON orders.DeliveryAddress = address.AddressID
JOIN stock ON basket.StockID = stock.StockID
ORDER BY  `customer`.`CustomerID` ASC
LIMIT 0 , 30

查询在没有CASE WHEN的情况下工作正常,并且在正常选择Dispatched时显示1和0,以及在引用Dispatched时WHERE正常工作。

但是当我尝试添加

CASE WHEN basket.Dispatched = 1 THEN 'Yes' ELSE 'No' END AS basket.Dispatched

我收到错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.Dispatched FROM orders JOIN OrdersBasketJoin ON orders.OrdersID = Ord' at line 12

从我研究的内容来看,这就像你可以做的情况一样简单,我相信语法是正确的。

不确定它是否只是一个视觉错误,但是CASE中的“END”并不会像已知的那样点亮,而JOIN,ON,LEFT等都亮起来,无论END在哪里都没有吨。

非常感谢任何和所有帮助-Tom

3 个答案:

答案 0 :(得分:3)

,之后address.Country遗失了你因为你遇到语法错误试试这个

SELECT 
orders.OrdersID, 
stock.ItemName, 
basket.Quantity, 
customer.FirstName, 
customer.LastName, 
address.AddressLine1, 
address.AddressLine2, 
address.TownOrCity, 
address.Postcode, 
address.Country, 
(CASE WHEN basket.Dispatched = 1 THEN 'Yes' ELSE 'No' END) AS `basket.Dispatched` 
FROM orders
JOIN OrdersBasketJoin ON orders.OrdersID = OrdersBasketJoin.OrdersID
LEFT JOIN basket ON OrdersBasketJoin.BasketID = basket.BasketID
JOIN customer ON orders.CustomerID = customer.CustomerID
JOIN address ON orders.DeliveryAddress = address.AddressID
JOIN stock ON basket.StockID = stock.StockID
ORDER BY  `customer`.`CustomerID` ASC
LIMIT 0 , 30

答案 1 :(得分:1)

添加反引号:

AS `basket.Dispatched` 

答案 2 :(得分:0)

CASE WHEN basket.Dispatched = 1 THEN 'Yes' ELSE 'No' END AS 'basket.Dispatched'

您在别名之前和之后缺少单引号。

我在没有单引号的DEV机器中尝试了这个并且有相同的错误。

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '.'.