MySQL:使用条件

MySQL:使用条件,mysql,Mysql,我必须向下执行以下情况,但运行时出现错误: SQL错误1064:您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near“INTO produto\u SERIAISERIAIS\u id值选择id”的语法 从序列号开始,其中第5行的序列号=' 情况如下: 我将通过序列X进入序列表。如果它已经存在,除非您的ID在produto_序列表中。如果有序列号,我将保存相同的序列号,恢复您的ID并保存到produto_Serais。有什么建议吗 重要提示:此例程将运行数千次,每次

我必须向下执行以下情况,但运行时出现错误:

SQL错误1064:您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near“INTO produto\u SERIAISERIAIS\u id值选择id”的语法 从序列号开始,其中第5行的序列号='

情况如下:

我将通过序列X进入序列表。如果它已经存在,除非您的ID在produto_序列表中。如果有序列号,我将保存相同的序列号,恢复您的ID并保存到produto_Serais。有什么建议吗

重要提示:此例程将运行数千次,每次执行10000次或更多,具体取决于串行数据的数量


注:很抱歉我的英语不好。

你可以使用if exists..else语句

If exists (select * from ....)
Begin
      Insert into ... Select id from table
End
Else
Begin
      Insert.. 
End
请填写。。。。你的陈述。您可以使用此处的链接将其转换为MySQL。 尝试一个存储过程

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')

您可以使用if,但if作为函数和if作为分支控件是有区别的。后者只能用于过程和触发器。您的SQL没有意义。请解释你想做什么。示例数据和期望的结果确实有帮助。@Mihai,你能帮我举个例子吗?你创建了存储过程吗?你可以直接使用INSERT INTO SELECT,如果没有行,则不会插入任何内容,如果它们大于正常值,则ELSE部分没有意义,因为您正在插入一个值,并且已检查该值是否存在于第一部分中。您可能需要一个插入后触发器,该触发器将在每次插入父项后将外键插入子项。这可以直接执行,也可以在过程中执行?我直接尝试并返回错误Erro SQL 1064:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解要使用的正确语法,如“如果存在,请从seriais中选择id,其中serial='2020'开始插入”在第1行*@Danilo,答案中附带的链接将有助于转换为MySQL特定的语法。它也有一个例子。我只需要对我的案例做一些小的调整,但效果很好。谢谢你@meda
CALL sp_produto_seriais('2020')