MySQL:使用条件插入

时间:2015-10-17 18:51:07

标签: mysql

我必须执行以下情况,但是当你跑步时遇到错误:

  

SQL错误(1064):您的SQL语法中有错误;检查   手册,对应右边的MySQL服务器版本   语法使用' INTO produto_seriais(serial_id)VALUES(SELECT id   FROM seriais WHERE serial ='在第5行

SELECT CASE WHEN (
    SELECT COUNT(id) FROM seriais WHERE serial = '2020'
) > 1
THEN
    (INSERT INTO produto_seriais(serial_id) VALUES(
        SELECT id FROM seriais WHERE serial = '2020'
    ))
ELSE (
    INSERT INTO seriais (serial) VALUE('2020');
    SET @last_id_in_table1 = LAST_INSERT_ID();
    INSERT INTO produto_seriais (serial_id) VALUES (@last_id_in_table1);
)
END;

案例如下:

我会进入" serial"表格连续" X"。如果它已经存在,除非您的ID在" produto_seriais"表。如果有(序列号),我将保存相同的内容,恢复您的ID并保存到" produto_seriais"。有关如何做到这一点的任何建议吗?

重要说明:此例程每次执行将运行数千次(10,000或更多,具体取决于串行数量)。

P.s。:抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

您可以使用if exists..else语句。

If exists (select * from ....)
Begin
      Insert into ... Select id from table
End
Else
Begin
      Insert.. 
End

请填写....与您的陈述。您可以使用此处的链接将其转换为MySQL。 Convert if exists for MySQL

答案 1 :(得分:0)

尝试存储过程

DELIMITER //
 CREATE PROCEDURE sp_produto_seriais(IN `p_serial_id`)
    IF EXISTS (SELECT * FROM  seriais WHERE serial = p_serial_id )
    BEGIN
        INSERT INTO produto_seriais (serial_id)
        SELECT id
        FROM   seriais
        WHERE  serial = p_serial_id
    END
    ELSE
    BEGIN
        INSERT INTO seriais (serial) VALUE(p_serial_id);
        INSERT INTO produto_seriais (serial_id) VALUES (LAST_INSERT_ID());
    END //
 DELIMITER ;

用法:

CALL sp_produto_seriais('2020')