Mysql 使用选择插入到。。。。如果SELECT返回0行怎么办

Mysql 使用选择插入到。。。。如果SELECT返回0行怎么办,mysql,sql,Mysql,Sql,我有一个具有以下代码的存储过程: INSERT INTO vt_benutzer_medien_liste (`BenutzerID`, `ReportID`, `MedienDateiTypID`, `Dateiname`, `Dateidatum`, `Dateigroesse`, `Bemerkungen`) SELECT UserID, ReportID, COALESCE(vtmd.ID,16), Filename, FileDate, FileSize, Message FROM

我有一个具有以下代码的存储过程:

INSERT INTO vt_benutzer_medien_liste (`BenutzerID`, `ReportID`, `MedienDateiTypID`, `Dateiname`, `Dateidatum`, `Dateigroesse`, `Bemerkungen`)
SELECT UserID, ReportID, COALESCE(vtmd.ID,16), Filename, FileDate, FileSize, Message 
FROM vt_medien_dateityp AS vtmd 
WHERE vtmd.Dateiendung = SUBSTRING_INDEX(Filename,'.',-1)
LIMIT 1
UserID、ReportID、Filename、FileDate、FileSize和Message是参数

插入部分工作正常。将参数“Filename”中提供的文件扩展名与表vtmd中的文件扩展名列表进行比较。 只要vtmd中存在文件扩展名,这也可以正常工作

如果不是,它应该得到一个默认值16->COALESCE(vtmd.ID,16) 但这并没有发生。由于SELECT未找到/返回任何行,因此过程将在没有任何错误的情况下完成,并且未进行任何插入

我能做什么

PS:别名是为了便于阅读

更新


选择返回一个空结果。在这种情况下,我希望返回16作为默认值。

如果您的选择没有返回任何行,则没有要插入的内容。使用合并不会强制插入,因为SELECT没有行,即使为所有列指定了合并,如果SELECT没有返回行,也不会插入任何内容


返回的行中的null值与没有行之间存在差异。

如果您的选择没有返回行,则没有要插入的内容。使用合并不会强制插入,因为SELECT没有行,即使为所有列指定了合并,如果SELECT没有返回行,也不会插入任何内容

返回的行中的null值与没有行之间存在差异。

这是有效的:

BEGIN
SELECT @XDateiTypID := COALESCE((SELECT ID FROM vt_medien_dateityp WHERE Dateiendung = SUBSTRING_INDEX(Filename,'.',-1) LIMIT 1),16);
INSERT INTO vt_benutzer_medien_liste (`BenutzerID`, `ReportID`, `MedienDateiTypID`, `Dateiname`, `Dateidatum`, `Dateigroesse`, `Bemerkungen`)
VALUES (UserID, ReportID, @XDateiTypID, Filename, FileDate, FileSize, Message);
END
  • 将SELECT作为变量处理(在我的示例中为@XDateiTypID)
  • 如果变量保持为NULL,则将使用COALESCE和默认值(在我的示例中为16)覆盖该变量
  • 在那之后,只需使用VALUES部分中的变量,就完成了
  • PS:因为它是一个存储过程。

    它的工作原理是:

    BEGIN
    SELECT @XDateiTypID := COALESCE((SELECT ID FROM vt_medien_dateityp WHERE Dateiendung = SUBSTRING_INDEX(Filename,'.',-1) LIMIT 1),16);
    INSERT INTO vt_benutzer_medien_liste (`BenutzerID`, `ReportID`, `MedienDateiTypID`, `Dateiname`, `Dateidatum`, `Dateigroesse`, `Bemerkungen`)
    VALUES (UserID, ReportID, @XDateiTypID, Filename, FileDate, FileSize, Message);
    END
  • 将SELECT作为变量处理(在我的示例中为@XDateiTypID)
  • 如果变量保持为NULL,则将使用COALESCE和默认值(在我的示例中为16)覆盖该变量
  • 在那之后,只需使用VALUES部分中的变量,就完成了

  • PS:因为它是一个存储过程。

    运行just select语句,您将看到它是否返回数据您是否尝试只运行
    select
    而不运行
    INSERT
    ?我很确定它不会返回任何内容。运行just select语句,您将看到它是否返回数据您是否尝试只运行
    select
    而不运行
    INSERT
    ?我敢肯定它不会有任何回报。