postgresql - 如果列具有特定值,如何签入表?
问题描述
我在 postgress 中需要查询帮助,我正在尝试检查列是否有值并进行插入
我在本地和服务器上有两个数据库,在这个表中的 ccpt_data.user_role_permission 列 user_role_name 我有权限:
Locally I have this query and works :
INSERT INTO ccpt_data.user_role_permission(user_role_name, permission_name)
VALUES ('manager','MANAGE_SENSITIVE_DATA');
For the server will be something
INSERT INTO ccpt_data.user_role_permission(user_role_name, permission_name)
VALUES ('ROLE_PROJECT_MANAGER','MANAGE_SENSITIVE_DATA');
但我不能这样做,所以我需要 if-else 条件,例如检查 user_role_name 中的 ccpt_data.user_role_permission 是否有一个经理,而不是我会这样做,否则另一个这个,所以我正在尝试一些东西,但作为我不知道 Postgres 我需要一些帮助。我在尝试 :
DO
$do$
BEGIN
IF EXISTS (SELECT FROM ccpt_data.user_role_permission Where user_role_name = manager ) THEN
INSERT INTO ccpt_data.user_role_permission(user_role_name, permission_name)
VALUES ('ROLE_PROJECT_MANAGER','MANAGE_SENSITIVE_DATA');
ELSE
INSERT INTO ccpt_data.user_role_permission(user_role_name, permission_name)
VALUES ('manager','MANAGE_SENSITIVE_DATA');
END IF;
END
$do$
解决方案
我看不出你所拥有的东西有什么问题,除了在SELECT
and之间缺少一些东西FROM
,你需要加上manager
引号。它应该工作。
但是,如果您想避免程序代码,您可以使用返回if exists 和else 的CASE
表达式。'ROLE_PROJECT_MANAGER'
'manager'
'manager'
例如在一个INSERT ... SELECT ...
(但如果你愿意的话,也应该把它放在一个VALUES
子句中):
INSERT INTO ccpt_data.user_role_permission
(user_role_name,
permission_name)
SELECT CASE
WHEN EXISTS (SELECT *
FROM ccpt_data.user_role_permission
WHERE user_role_name = 'manager') THEN
'ROLE_PROJECT_MANAGER'
ELSE
'manager'
END,
'MANAGE_SENSITIVE_DATA';
推荐阅读
- java - 多行TextView getLineForVertical在Android中返回错误的行顺序
- kotlin-exposed - 公开的查询和大型数据集
- android - 是否可以在我们的android应用程序中打印其他应用程序的日志?
- gnu-make - 错误:/usr/bin/ld:找不到-lpython2.7 collect2:错误:ld返回1退出状态
- objection.js - 关系映射的 Objection.js 别名
- python - 我如何从 csv 文件中获取值并打印在值的 + 或 - 1 内的值?
- ios - 如何管理单个 viewController 中的表视图行?
- java - 将数组元素设置为 Null - Java
- c++ - 研究从给定阶乘 (N) 中查找数字的大输入 (10^36) 的解决方案
- string - PostgreSQL 查询也应在主表中包含空值