이 문제를 해결하기위한 더 나은 쿼리가 있습니까?OR 및 OR이 더 많은 Oracle SQL 동적 쿼리
1 차에는 여러 유형이 있습니다. (PS이 올바르지 않습니다 내가 아는)
select * from car join type on car.id = type.id_car
where type = 'SUV'
and type = '4x4'
and (type = 'blue' or type = 'red')
and type = 'US'
and (type = 'Manual' or type = 'Automatic' or 'SemiAutomatic')
and type = 'diesel' and so on.
내 솔루션은 다음과 같습니다 :
select * from car
where numberOfANDType = (select count(1) from Type where car.id = type.id_car and type in ('suv', '4x4', 'us', 'diesel'))
and exists (select 1 from type where car.id = type.id_car and type in ('blue', 'red'))
and exists (select 1 from type where car.id = type.id_car and type in ('manual', 'automatic' or 'SemiAutomatic');
등등
나는 이런 식으로 뭔가를 할 수 있습니다.
ps : AND
ps2와 함께 사용되는 조건의 수를 알고 있습니다. 이러한 조건은 동적입니다.
Anywayz : 각 유형에 대해 GROUP 열이 있고 OR 그룹에 사용 된 유형에 대해이 열에 같은 값이 있습니다. SUV에는 GROUP = 1, 파란색에는 GROUP = 2, 빨간색에는 GROUP = 2 등이 있습니다. 그래서 모든 그룹이 덮여 있는지 확인하려면 그룹의 TYPE 열과 개수에 대한 쿼리를 만듭니다.
Select id from car join type on .. where type in ('SUV', 'blue', 'red') group by id having count(distinct group) > 2;
감사합니다.
ps3 :이 질문에 답한 사람 덕분에, 당신은 매우 친절합니다.
당신을 가지고 이 쿼리가 좋지 않은지 확인하기 위해 계획을 사용 했습니까? 실수가 아니라면, 오라클은 사용할 때 당신의 타입 FK를 사용하여 차 PK를 가리킬 것입니다. –
당신이 얻으려고하는 것은 분명하지 않습니다 - 모든 유형의 모든 차량, 모든 유형의 차량,이 유형을 제외한 모든 차량,이 유형 중 일부가 있지만 다른 것은없는 모든 차량을 반환하고 싶습니까? 또는 무엇을? –
모든 AND 유형과 OR 그룹 중 하나 이상을 가진 모든 자동차. 당신은 어떤 수의 AND 유형이나 OR 그룹을 가질 수 있으며, OR 그룹 내에는 몇 가지 유형을 가질 수 있습니다. –