我有一个查询在 MySQL Workbench 中运行得很好,但是当我尝试使用 PyODBC 运行它时,出现语法错误。这是查询:
SET @username=?;SELECT Username, CASE
WHEN EXISTS (SELECT 1 FROM Admins WHERE Username=@username) THEN "ADMIN"
WHEN EXISTS (SELECT 1 FROM Customers WHERE Username=@username) THEN "CUSTOMER"
WHEN EXISTS (SELECT 1 FROM Retailers WHERE Username=@username) THEN "RETAILER"
ELSE "UNKNOWN"
END
AS Type
FROM Users WHERE Username=@username;
我收到的错误消息是:
('42000', "[42000] [MySQL][ODBC 8.1(w) Driver][mysqld-8.0.31] 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 'SELECT Username, CASE\n\t\tWHEN EXISTS (SELECT 1 FROM Admins WHERE Username= @usern' at line 1 (1064) (SQLPrepare)")
我尝试通过使用 DECLARE 声明 @username 变量来修改查询,但这似乎也不起作用。知道可能导致此语法错误的原因以及如何修复它吗?
BEGIN ... END
复合语句。另外,避免字符串文字使用双引号,并使用反引号转义潜在的保留字。
BEGIN
SET @username = ?;
SELECT
`Username`,
CASE
WHEN EXISTS (SELECT 1 FROM Admins WHERE `Username`=@username) THEN "ADMIN"
WHEN EXISTS (SELECT 1 FROM Customers WHERE `Username`=@username) THEN "CUSTOMER"
WHEN EXISTS (SELECT 1 FROM Retailers WHERE `Username`=@username) THEN "RETAILER"
ELSE 'UNKNOWN'
END AS `Type`
FROM `Users`
WHERE `Username`=@username;
END;