SQL 处理插入语句期间子查询可能出现的空结果

SQL to handle potential for null result from subquery during insert statement

我正在执行插入,并使用子查询 select 插入语句的电子邮件地址,例如:

INSERT INTO users (id, email, date) 
VALUES (123,
        (SELECT email from list_of_emails 
         WHERE email = 'abc@yahoo.com'),
        NOW())

用户 table 对电子邮件地址有 non-null 约束,所以我试图捕捉的是可能没有与子查询匹配的电子邮件地址,其中如果发生 not-null constraint 违规。

有关如何在子查询期间捕获此值错误的任何建议和 return 一些错误消息,如“找不到电子邮件地址”

只需使用INSERT ... SELECT ...;形式:

INSERT INTO users (id, email, date)
SELECT DISTINCT 123, email, now()
  FROM list_of_emails
 WHERE email = 'abc@yahoo.com'
;

这避免了在找不到电子邮件行时尝试插入。希望您没有重复的电子邮件条目,因为这在原始邮件中也是一个问题。我添加了一个 DISTINCT 以防万一,因为我不知道你的架构。如果保证电子邮件在电子邮件 table.

中是唯一的,请删除 DISTINCT

您可以使用 WHERE EXISTS。

INSERT INTO users (id, email, date) VALUES (
123,
(
  SELECT email from list_of_emails WHERE email = 'abc@yahoo.com'
),
now() 
)
WHERE EXISTS (SELECT email from list_of_emails WHERE email = 'abc@yahoo.com')