首页 > 解决方案 > 如果列具有特定值,如何签入表?

问题描述

我在 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$

标签: postgresql

解决方案


我看不出你所拥有的东西有什么问题,除了在SELECTand之间缺少一些东西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';

推荐阅读