2010-06-07 19 views
1

我剛剛在MySQL中創建了一個簡單的數據庫,並且正在學習如何編寫存儲過程。我熟悉M $ SQL而據我可以看到下面應該工作:MySQL創建存儲過程失敗,但所有內部查詢單獨成功?

use mydb; 
-- -------------------------------------------------------------------------------- 
-- Routine DDL 
-- -------------------------------------------------------------------------------- 
DELIMITER // 
CREATE PROCEDURE mydb.doStats() 
BEGIN 

CREATE TABLE IF NOT EXISTS resultprobability (
ballNumber INT NOT NULL , 
probability FLOAT NULL, 
PRIMARY KEY (ballNumber)); 

CREATE TABLE IF NOT EXISTS drawProbability (
drawDate DATE NOT NULL , 
ball1 INT NULL , 
ball2 INT NULL , 
ball3 INT NULL , 
ball4 INT NULL , 
ball5 INT NULL , 
ball6 INT NULL , 
ball7 INT NULL , 
score FLOAT NULL , 
PRIMARY KEY (drawDate)); 

TRUNCATE TABLE resultprobability; 

TRUNCATE TABLE drawprobability; 

INSERT INTO resultprobability (ballNumber, probability) 
(select resultset.ballNumber ballNumber,(count(0)/(select count(0) from resultset)) probability 
    from resultset 
    group by resultset.ballNumber); 

INSERT INTO drawProbability (drawDate, ball1, ball2, ball3, ball4, ball5, ball6, ball7, score) 
(select distinct r.drawDate, a.ballnumber ball1, b.ballnumber ball2, 
c.ballnumber ball3, d.ballnumber ball4, e.ballnumber ball5, 
f.ballnumber ball6,g.ballnumber ball7, 
((a.probability + b.probability + c.probability + d.probability + e.probability + f.probability + g.probability)/7) score 
from resultset r 
inner join (select r.drawDate, r.ballNumber, p.probability from resultset r inner join resultprobability p on p.ballNumber = r.ballNumber where r.appearence = 1) a on a.drawdate = r.drawDate 
inner join (select r.drawDate, r.ballNumber, p.probability from resultset r inner join resultprobability p on p.ballNumber = r.ballNumber where r.appearence = 2) b on b.drawdate = r.drawDate 
inner join (select r.drawDate, r.ballNumber, p.probability from resultset r inner join resultprobability p on p.ballNumber = r.ballNumber where r.appearence = 3) c on c.drawdate = r.drawDate 
inner join (select r.drawDate, r.ballNumber, p.probability from resultset r inner join resultprobability p on p.ballNumber = r.ballNumber where r.appearence = 4) d on d.drawdate = r.drawDate 
inner join (select r.drawDate, r.ballNumber, p.probability from resultset r inner join resultprobability p on p.ballNumber = r.ballNumber where r.appearence = 5) e on e.drawdate = r.drawDate 
inner join (select r.drawDate, r.ballNumber, p.probability from resultset r inner join resultprobability p on p.ballNumber = r.ballNumber where r.appearence = 6) f on f.drawdate = r.drawDate 
inner join (select r.drawDate, r.ballNumber, p.probability from resultset r inner join resultprobability p on p.ballNumber = r.ballNumber where r.appearence = 7) g on g.drawdate = r.drawDate 
order by score desc); 

END 
// 
DELIMITER ; 

,而不是我得到以下

Executed successfully in 0.002 s, 0 rows affected. 
Line 1, column 1 

Error code 1064, SQL state 42000: 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 '' at line 26 
Line 6, column 1 

Error code 1064, SQL state 42000: 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 ')) probability 
    from resultset 
    group by resultset.ballNumber); 

INSERT INTO d' at line 1 
Line 31, column 51 

Error code 1064, SQL state 42000: 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 ') score 
from resultset r 
inner join (select r.drawDate, r.ballNumber, p.probabi' at line 1 
Line 39, column 114 

Execution finished after 0.002 s, 3 error(s) occurred. 

我在做什麼錯?我似乎已經耗盡了我有限的心智能力!

以下有關取出插入...選擇映射,然後重新運行建議後,我收到以下錯誤

Executed successfully in 0.002 s, 0 rows affected. 
Line 1, column 1 

Error code 1064, SQL state 42000: 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 '' at line 26 
Line 6, column 1 

Error code 1064, SQL state 42000: 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 ')) probability 
    from resultset 
    group by resultset.ballNumber); 

INSERT INTO d' at line 1 
Line 31, column 51 

Error code 1064, SQL state 42000: 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 ') score 
from resultset r 
inner join (select r.drawDate, r.ballNumber, p.probabi' at line 1 
Line 39, column 114 

Execution finished after 0.002 s, 3 error(s) occurred. 
+0

你使用的是什麼版本的MySQL? 'SELECT VERSION();' – 2010-06-08 00:13:35

+0

@Bill 5.1.47-community – Mark 2010-06-08 08:36:50

回答

1

「的所有內部查詢成功獨自」

不,他們不,這裏的第一個平常supect失敗,則:

INSERT INTO drawProbability (...) (select... 

失去「(」前選擇,重新運行,複試,解決下一個語法錯誤作爲急於解決的辦法是沒有理由跳過基本呃。如果你不這樣做,尤其不要聲稱已經運行它們。

+0

我已經單獨運行它們,它們確實可以工作!爲了證明這種說法的作品,當我運行它的2倍,而不截斷我一鍵搞定vilolation 錯誤代碼1062,SQL狀態23000:複製關鍵「主要」 1號線入口「2010-01-30」,列1 執行0秒後完成,發生1個錯誤。 – Mark 2010-06-08 08:38:59

+0

好吧,讓我們假設這是正確的,如果你提出了第一個建議的變更,你的程序會發生什麼?第一個錯誤消失了嗎? – Wrikken 2010-06-08 11:06:02

+0

我提出了你的建議修改,錯誤保持不變。看到修改問題,歡呼! – Mark 2010-06-08 23:00:59