我有一个名为“ 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行,可以是任意级别。