MySql 如果存在选择 ELSE 插入

标签 mysql sql stored-procedures

我已经为此苦恼了两个小时。我想选择或插入一条记录。如果记录存在,请选择他的 ID,否则将其插入并获取新插入的 ID。现在我正在尝试运行它,但我仍然遇到错误

SELECT CASE WHEN (SELECT COUNT(*) FROM Domains WHERE Domain = @domain)>0 
THEN 
    (SELECT Domain_ID FROM Domains WHERE Domain = @domain) 
ELSE        
    INSERT INTO Domains(Domain_ID,Domain,Disabled,Description) VALUES(@Domain_ID,@Domain,@Disabled,@Description);

最佳答案

您的案例缺少 End

Case when (something) then (Some)
else (another thing) end

无论如何,你的 else 必须返回一个 select,一个 insert 不会返回任何东西。 如果你想插入如果不存在然后返回插入的值(或返回如果存在) 这样做:

INSERT INTO Domains(Domain_ID,Domain,Disabled,Description) VALUES(@Domain_ID,@Domain,@Disabled,@Description) where not exists (select 1 from Domains WHERE Domain = @domain);

SELECT Domain_ID FROM Domains WHERE Domain = @domain

如果不存在则插入,然后返回。如果已经存在,则不插入,并返回值

2016 年 1 月编辑

最后一个查询不适用于MySql,它是MSSQL语法

关于MySql 如果存在选择 ELSE 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12676322/

相关文章:

sql - 保持多个数据库之间的引用完整性

sql-server - 是否可以列出 SSRS 中结果集中实际使用的字段?

mysql - 一次调用多个 mysql 存储过程

mysql - 使用 MySQL Workbench 选择目标架构

mysql - 是否有可能找到存储在 MySQL 中的 TEXT 中的重复模式?

MySQL:使 2 个值唯一

sql - 在创建过程时需要一些帮助

php - 如何将数据库列中的所有 id 放入一个数组中?

mysql - 如何使用 Node 流向mysql插入大数据?

mysql - 如何在 SQL 中分组为多列