我有一张桌子如下
create table auto
(
ID number,
SEQ number,
COLUMN_NME varchar2(10),
RELATIONAL_OPERATOR varchar2(20),
COLUMN_VALUE varchar2(20)
);
insert into auto SELECT 1,1,'HONDA','=','ACCORD' FROM DUAL;
insert into auto SELECT 1,2,'ENGINE','=','V6' FROM DUAL;
insert into auto SELECT 1,3,'COLOR','=','BLACK' FROM DUAL;
insert into auto SELECT 1,4,'COLOR','=','BLUE' FROM DUAL;
insert into auto SELECT 2,1,'TOYOTA','=','SIENNA' FROM DUAL;
insert into auto SELECT 2,2,'COLOR','=','BLACK' FROM DUAL;
insert into auto SELECT 2,3,'ENGINE','<>','V6' FROM DUAL;
insert into auto SELECT 3,1,'HONDA','=','ODYSSEY' FROM DUAL;
insert into auto SELECT 3,1,'COLOR','<>','BLACK' FROM DUAL;
insert into auto SELECT 3,1,'ENGINE','=','V6' FROM DUAL;
insert into auto SELECT 3,1,'HONDA','=','CRV' FROM DUAL;
我需要结果在哪里
(考虑所有 RELATIONAL_OPERATOR 都是“=”)
我尝试使用案例陈述来编写
select ID,SEQ,case when column_nme = 'HONDA' and column_value = 'ACCORD' THEN 1 ELSE 0 END HONDA,
CASE WHEN COLUMN_NME = 'ENGINE' AND COLUMN_VALUE = 'V6' THEN 1 ELSE 0 END ENGINE,
CASE WHEN COLUMN_NME = 'COLOR' AND COLUMN_VALUE = 'BLACK' THEN 1 ELSE 0 END COLOR
FROM AUTO;
我需要此表的 ID,其中 HONDA = 1,ENGINE = 1 AND COLOR = 1
您的表 auto 是一个 EAV(实体属性值)表,并且您希望 ID 匹配所有三个条件:
查询 EAV 表的典型方法是通过聚合:获取具有所有所需匹配项的所有 ID:
select id
from auto
group by id
having count(case when column_nme = 'HONDA' and relational_operator = '=' and column_value = 'ACCORD' then 1 end) > 0
and count(case when column_nme = 'COLOR' and relational_operator = '=' and column_value = 'BLACK' then 1 end) > 0
and count(case when column_nme = 'ENGINE' and relational_operator = '=' and column_value = 'V6' then 1 end) > 0;