我有一个零售场景的小型数据库,在此我有一个名为“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
答案 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 '.'.