INSERT INTO with SELECT .... 如果 SELECT 返回 0 行怎么办

科利亚·艾达姆

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

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:别名是为了可读性。

更新

SELECT 返回空结果。这就是我想返回 16 作为默认值的情况。

科利亚·艾达姆

这有效:

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
  1. 将 SELECT 作为变量处理(在我的例子中@XDateiTypID)。
  2. 如果变量保持NULL,它将通过使用 COALESCE 和默认值(在我的情况下为 16 )被覆盖。
  3. 之后,只需使用 VALUES 部分中的变量即可完成。

PS:BEGIN .. END 需要,因为它是一个存储过程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从SELECT内部SELECT返回多个行

write(2)是否可以返回0个字节的已写入*,如果可以,该怎么办?

如果Spring MVC控制器方法不返回值,该怎么办?

如果isAvailableForServiceType方法返回NO,该怎么办

如果第一个SELECT返回0行,则第二个SELECT查询

INSERT INTO ... FROM SELECT ...返回ID映射

如果不能忽略由MySQL INSERT ... ON DUPLICATE KEY UPDATE引起的auto_increment差距怎么办?

如果SELECT返回0行,INSERT OVERWRITE是否创建新的空分区

如果将NULL和大小0传递给realloc()怎么办?

INSERT或SELECT策略总是返回一行?

如果INSERT OVERWRITE的SELECT查询未返回任何结果,是否有办法防止Hive表被覆盖

如果计数为0或未找到行,则返回每个Select Case选项的结果

如果我忽略了shared_ptr返回类型的函数的返回值怎么办

Kotlin:返回泛型类型的函数。如果我不知道应该返回哪种具体类型该怎么办?

如果在html select标签中未指定select选项的值怎么办

Redshift SQL语句,如果select语句返回任何行,它将返回1或0

SELECT语句中的SELECT返回0个计数

位置0没有行...。我该怎么办..?

“如果!”怎么办?意思是?

如果Select SQL返回Null,如何使用MEL处理数据

NOT IN Select语句返回0值

SELECT LAST_INSERT_ID()返回零

一张订单有多个订单,没有多余结果的select子句,怎么办?

Java,如果我想从函数返回不同的类型怎么办?

如果“ echo $”怎么办?命令返回2?

SQL Server-使用SELECT CASE WHEN设置位变量,但如果SELECT不返回任何记录,则将其默认设置为0

如果block_given怎么办?返回假?

Next.js:如果子进程没有任何数据要返回怎么办?

如果 std::vector::insert(pos, value) 的 pos 无效怎么办?