2012-12-03 84 views
1

我試圖從MySQL表中選擇一個值(id),並在更新語句中使用它 - 全部在MySQL查詢中。 select由兩部分組成:如果id存在,則返回;如果不是,則完成2次插入並返回ID。向MySQL插入多條語句

我有以下查詢:

SELECT 
    (CASE a.id WHEN '' THEN (
     DELIMITER // 
     INSERT INTO xxxx (item_id, date_created, date_modified) VALUES (3313, NOW(), NOW())// 
     INSERT INTO yyyy (item_id, locale_id, value, date_created, date_modified) VALUES(LAST_INSERT_ID(), 2, TRIM(SUBSTRING_INDEX('some text: 250 x 46 x 584', ':', 1)), NOW(), NOW())// 
     SELECT c.id FROM xxxx c JOIN yyyy d WHERE c.item_id=3313 AND d.value='some text' LIMIT 1 
    ) ELSE a.id END 
) AS trans_ref_id 
FROM xxxx a JOIN yyyy b ON a.id = b.item_id 
WHERE b.value='some text' 

當我運行它,我得到以下錯誤:

SQL錯誤(1064):你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用近「) ELSE A.ID END ) 作爲trans_ref_id FROM XXXX」第2行

我是否有此錯誤的做法的手冊?這個錯誤來自哪裏?

回答

0

你不能用SQL來做到這一點。您需要使用cursors。該手冊有一個示例供您參考。可能最好把它放在存儲過程中。

0

你的創意嘗試不符合SELECT+INSERT syntax,這就是:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] 
    [INTO] tbl_name [(col_name,...)] 
    SELECT ... 
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] 
+0

可能有一個問題'NOW'兩個插入的值可能會有所不同。 –