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')
我正在执行插入,并使用子查询 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')