1

我正在尝试从 MySQL 表中选择一个值(id)并在更新语句中使用它 - 所有这些都在 MySQL 查询中。select由2部分组成:如果id存在则返回;如果没有,则完成 2 次插入并返回 id。

我有以下查询:

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 服务器版本相对应的手册,以在第 2 行的 ') ELSE a.id END ) as trans_ref_id FROM xxxx' 附近使用正确的语法

我在这里有错误的方法吗?这个错误来自哪里?

4

2 回答 2

0

你不能用 SQL 做到这一点。您需要使用游标。该手册有一个示例供您查看。可能最好把它放在一个存储过程中。

于 2012-12-03T10:27:50.863 回答
0

您的创意尝试不符合SELECT+INSERT 语法,即:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
于 2012-12-03T10:28:26.833 回答