sql - SQL IF ELSE 后跟 INSERT
问题描述
我正在尝试根据是否存在 CONSTRAIN 来执行两个不同的 INSERT 语句。到目前为止,我使用
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu
ON cu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
WHERE tc.CONSTRAINT_TYPE = 'UNIQUE'
AND tc.TABLE_NAME = 'table'
AND cu.COLUMN_NAME = 'user'
我尝试使用 IF EXIST 和 ELSE 来区分两个 INSERT 语句。但显然我只能在 IF ELSE 语句之后使用 SELECT
试图做这样的事情:
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu
ON cu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
WHERE tc.CONSTRAINT_TYPE = 'UNIQUE'
AND tc.TABLE_NAME = 'table1'
AND cu.COLUMN_NAME = 'user')
INSERT INTO table1 (username,datainfo) VALUES ('A','test1')
ELSE
INSERT INTO table1 (username,datainfo) VALUES ('B','test2')
解决方案
IF
s 不能在纯 SQL 中使用。您可以按如下方式创建函数、过程或anonymous code block
使用PL/pgSQL
:
DO $$
BEGIN
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu
ON cu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
WHERE tc.CONSTRAINT_TYPE = 'UNIQUE'
AND tc.TABLE_NAME = 'table1'
AND cu.COLUMN_NAME = 'user') THEN
INSERT INTO table1 (username,datainfo) VALUES ('A','test1');
ELSE
INSERT INTO table1 (username,datainfo) VALUES ('B','test2');
END IF;
END; $$ LANGUAGE plpgsql;
推荐阅读
- kotlin - 在命令行中执行 Intellij Idea 工件构建的 jar 文件时出现“NoClassDefFoundError”
- regex - 正则表达式:在字符之间创建空组,包括之间没有任何内容时
- python - 尝试导入海龟时收到错误消息(python 3.9,m1 Mac)
- ios - 在不符合 MapAnnotationProtocol 的 SwiftUI 2 中添加 MapAnnotations
- rust - 转换流
- , _>> 到流
- >
- , _>> 到流
- jwt - 将“承载”作为前缀添加到您的网络令牌的原因是什么?
- python - 我一直在 'int' 对象中运行不可下标( board[random_coord[0],random_coord[1]] = 'O' )
- bash - 有没有办法动态加载bash变量
- javascript - React 无法在我的 KeyDown 事件中检测到“删除密钥”
- javascript - 未处理的拒绝(TypeError):已解析未定义并且在控制台中“未捕获(在承诺中)TypeError:已解析未定义”