在 SQL 语句中使用 'If Exists' 两次

Posted

技术标签:

【中文标题】在 SQL 语句中使用 \'If Exists\' 两次【英文标题】:Use 'If Exists' twice inside SQL Statement在 SQL 语句中使用 'If Exists' 两次 【发布时间】:2018-06-21 17:09:53 【问题描述】:

我正在尝试创建一个不存在的用户。我听起来很容易,但我需要控制是否存在其他东西。所以我使用了两次'IF EXISTS'。这是我的代码:

IF NOT EXISTS (SELECT userID 
               FROM UserTable 
               WHERE usernameID = (IF NOT EXISTS(SELECT usernameID 
                                                 FROM UsernameTable 
                                                 WHERE name = 'Martijn')
                                   BEGIN
                                       INSERT INTO  UsernameTable(name) 
                                       VALUES ('Martijn');
                                   END

                                   SELECT usernameID 
                                   FROM UsernameTable 
                                   WHERE name = 'Martijn';)
                   AND country = 'Netherlands')
BEGIN
    INSERT INTO  UserTable(usernameID, country) 
    VALUES (1, 'Netherlands');
END

我该如何解决这个问题?因为 mysql 不喜欢 IF EXISTS 我正在检查我的 usernameID。我需要为此办理手续吗?

【问题讨论】:

您需要两个命令 - 一个用于用户,一个用于用户/国家组合。 有没有办法把所有东西都放在一个 SQL 语句中? 创建一个你所拥有的简单架构。您正在使用哪个版本的 MySQL?您也许可以使用 upsert-ish 语法来完成您所需要的。 我正在使用 Microsoft SQL Server Management Studio 2017。最新和最新版本。 您在帖子中标记了 MySQL,但您说您使用的是 Microsoft SQL Server 客户端。您使用的是 MySQL 还是 Microsoft SQL Server? 【参考方案1】:

我搜索了一些解决方案,但最好的是使用PROCEDURE。 您可以在PROCEDURE 中创建多个IF EXISTS。 创建新用户后,我还能够保存我的 ID。

【讨论】:

【参考方案2】:

在 SQL Server 中,您应该可以这样做:

IF NOT EXISTS (SELECT userID FROM UserTable WHERE name = 'Martijn')
BEGIN
    INSERT INTO  UsernameTable(name, country)
        VALUES ('Martijn', 'Netherlands');
END;

这是尝试理解您的 SQL 代码。如果不存在“Martijn”,则将“Martijn”插入表中。

【讨论】:

以上是关于在 SQL 语句中使用 'If Exists' 两次的主要内容,如果未能解决你的问题,请参考以下文章

Sql语句优化-查询两表不同行NOT INNOT EXISTS连接查询Left Join

sql的语句提示有语法错误,求大神 create database if not exists `fwzl`;

SQL中EXISTS的使用方法

SQL 语句“CREATE EXTENSION[*] IF NOT EXISTS UUID_OSSP”中的语法错误

使用 if exists 使用合并 oracle sql 逻辑插入或更新

2022-11-21:第N高的薪水。表结构和数据的sql语句如下。请问sql语句如何写? DROP TABLE IF EXISTS employee; CREATE TABLE employee (