基于条件获取数据

时间:2019-04-30 15:11:25

标签: postgresql

我有一个名为“ custom_param”的表,其中包含多个级别的配置值,我需要按层次结构顺序获取数据。

表脚本:

CREATE TABLE custom_param (
    custom_param_id numeric NOT NULL,
    product_type_id numeric NOT NULL,
    customer_id numeric NULL,
    test_admin_id numeric NULL,
    code varchar(255) NULL,
    val varchar(4000) NULL,
    createdon timestamp NULL,
    modifiedon timestamp NULL,
    CONSTRAINT custom_param_pkey PRIMARY KEY (custom_param_id)
);

插入脚本:

INSERT INTO custom_param(custom_param_id, product_type_id,customer_id,test_admin_id,code,val,createdon,modifiedon) VALUES (1,1,1,1,'PERF_LVL','{"level":"63"}',now(),NULL);
INSERT INTO custom_param(custom_param_id, product_type_id,customer_id,test_admin_id,code,val,createdon,modifiedon) VALUES (2,1,1,1,'ACHV_LVL','{"level":"53"}',now(),NULL);
INSERT INTO custom_param(custom_param_id, product_type_id,customer_id,test_admin_id,code,val,createdon,modifiedon) VALUES (3,1,1,NULL,'PERF_LVL','{"level":"62"}',now(),NULL);
INSERT INTO custom_param(custom_param_id, product_type_id,customer_id,test_admin_id,code,val,createdon,modifiedon) VALUES (4,1,1,NULL,'ACHV_LVL','{"level":"52"}',now(),NULL);
INSERT INTO custom_param(custom_param_id, product_type_id,customer_id,test_admin_id,code,val,createdon,modifiedon) VALUES (5,1,NULL,NULL,'PERF_LVL','{"level":"63"}',now(),NULL);
INSERT INTO custom_param(custom_param_id, product_type_id,customer_id,test_admin_id,code,val,createdon,modifiedon) VALUES (6,1,NULL,NULL,'ACHV_LVL','{"level":"53"}',now(),NULL);

我们总是收到所有4个输入参数,product_type_id,customer_id,test_admin_id,代码。因此,我们需要根据以下条件进行获取

如果在这些组合中有可用于product_type_id,customer_id,test_admin_id的记录,则提取该记录。

否则,如果在这些组合中有product_type_id和customer_id可用的记录,则将其提取。

否则,如果这些组合中有可用于product_type_id的记录,则提取该记录。

在单个查询中有可能吗?

我尝试了以下查询,

 select * from custom_param where code in ('PERF_LVL', 'ACHV_LVL')  and  product_type_id = 1 and (customer_id = 1 or customer_id is null) and (test_admin_id = 1 or test_admin_id is null);

将返回所有符合上述条件的值,那么我需要处理Java中的逻辑以仅考虑所需的对象。

每个代码的实际结果只能是1行,可以是任意级别。

0 个答案:

没有答案