【发布时间】:2023-03-22 10:51:01
【问题描述】:
我试图避免编写单独的 SQL 查询来实现以下场景:
我有一个名为 Values 的表:
价值观:
id INT (PK)
data TEXT
我想检查表中是否存在某些数据,如果存在则返回其id,否则插入并返回其id。
(非常)天真的方式是:
select id from Values where data = "SOME_DATA";
如果 id 不为空,则取它。 如果 id 为 null 则:
insert into Values(data) values("SOME_DATA");
然后再次选择它以查看其 id 或使用返回的 id。
我试图在一行中实现上述功能。 我想我已经接近了,但我还不能做到: 到目前为止,我得到了这个:
select id from Values where data=(COALESCE((select data from Values where data="SOME_DATA"), (insert into Values(data) values("SOME_DATA"));
我试图利用这样一个事实,即第二个选择将返回 null,然后将返回 COALESCE 的第二个参数。至今没有成功。我错过了什么?
【问题讨论】:
-
有很多相似之处,也许答案会来自MySQL线程:P
-
您想要的行为是特定于供应商的。一些供应商提供了一种从插入/更新命令返回插入/删除值的方法。例如,在 SQL Server 中,您可以使用 OUTPUT 子句输出一个新 ID 而无需锁定,而 MySQL 有 LAST_INSERT_ID 来返回最后一个自动生成的 ID