[英]phpMyAdmin DB Query Joining Tables: ON Always Causes #1064 Syntax Error
[英]Query always returns 1064 syntax error
我使用'MariaDB 5.5 x64' and Client HeidiSQL
。
服務器環境是Windows Server2012數據中心。
和數據庫use_progress
在后面
int id //自動遞增主鍵
int owner //所有者用戶的唯一ID
varchar [20]名稱//鍵
int value //值
它存儲在線游戲用戶的狀態鍵值類型
例如
id owner name value
856 656 stage0cleared 0
857 656 have_gold 10214
858 657 inventory 22
並且下一個查詢的工作測試很好
select count(*) from use_progress where owner = 656 and name = "inventory";
INSERT INTO use_progress (use_progress.owner, use_progress.name, use_progress.value) VALUES (656, 'inventory', 7);
UPDATE use_progress SET use_progress.value = 7 WHERE use_progress.`owner` = 656 AND use_progress.`name` = 'inventory';
但是下一個查詢是錯誤1064(語法錯誤)
BEGIN
IF ((select count(*) from use_progress where owner = 656 and name = "inventory") = 0 ) THEN
INSERT INTO use_progress (use_progress.owner, use_progress.name, use_progress.value) VALUES (656, 'inventory', 7);
ELSE
UPDATE use_progress SET use_progress.value = 7 WHERE use_progress.`owner` = 656 AND use_progress.`name` = 'inventory';
END IF;
END
錯誤正在跟蹤下一步(總是該錯誤):
/* SQL error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'IF ((select count(*) from use_progress where owner = 656 and name = "inventory")' at line 2 */
我盡力了。 是否使用(),插入dbname.tablename。 是否為每個列名添加前綴。 但是在每種情況下,都會發生相同的錯誤。
我什至嘗試了這一點(第2行已更改):
BEGIN
IF (1>2) THEN
INSERT INTO use_progress (use_progress.owner, use_progress.name, use_progress.value) VALUES (656, 'inventory', 7);
ELSE
UPDATE use_progress SET use_progress.value = 7 WHERE use_progress.`owner` = 656 AND use_progress.`name` = 'inventory';
END IF;
END
但是發生相同的錯誤(消息相同)
我不知道為什么會這樣。
您不能在簡單查詢中僅在存儲過程或函數中使用IF() THEN ...
這樣的控制結構。
在這種情況下,您將使用存儲過程。 嘗試這樣:
DELIMITER $$
CREATE PROCEDURE my_proc_name(IN p_owner int, IN p_name varchar(50), IN p_value int)
BEGIN
IF NOT EXISTS (select 1 from use_progress where owner = p_owner and name = p_name) THEN
INSERT INTO use_progress (owner, name, `value`) VALUES (p_owner, p_name, p_value);
ELSE
UPDATE use_progress SET `value` = p_value WHERE `owner` = p_owner AND `name` = p_name;
END IF;
END $$
DELIMITER ;
創建它之后,您可以這樣稱呼它:
CALL my_proc_name(656, 'inventory', 7);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.