아래 표를 예제로 사용하고 나열된 쿼리를 기본 쿼리로 사용하여 최대 ID가있는 행만 선택할 수있는 방법을 추가하고 싶습니다! 두 번째 쿼리를 수행하지 않고도! MySQL이 최대 ID 및 다른 조건과 일치하는 행 선택
TABLE VEHICLES
id vehicleName
----- --------
1 cool car
2 cool car
3 cool bus
4 cool bus
5 cool bus
6 car
7 truck
8 motorcycle
9 scooter
10 scooter
11 bus
TABLE VEHICLE NAMES
nameId vehicleName
------ -------
1 cool car
2 cool bus
3 car
4 truck
5 motorcycle
6 scooter
7 bus
TABLE VEHICLE ATTRIBUTES
nameId attribute
------ ---------
1 FAST
1 SMALL
1 SHINY
2 BIG
2 SLOW
3 EXPENSIVE
4 SHINY
5 FAST
5 SMALL
6 SHINY
6 SMALL
7 SMALL
그리고 기본 쿼리
select a.*
from vehicle a
join vehicle_names b using(vehicleName)
join vehicle_attribs c using(nameId)
where c.attribute in('SMALL', 'SHINY')
and a.vehicleName like '%coo%'
group
by a.id
having count(distinct c.attribute) = 2;
그래서 내가 무엇을 달성하고자하는 것은 ID입니다 이름 만 일치하는 각 이름에 대해 하나의 항목과 일치 특정 속성을 가진 행을 선택하는 것입니다 최고!
그래서이 예에서 작업 솔루션은 아래의 행을 반환 :
id vehicleName
----- --------
2 cool car
10 scooter
이 순간에 ID
에 최대의 일종을 사용하는 경우 내가 멋진 차를 위해 모든 항목을 얻을 스쿠터.
내 실제 데이터베이스는 비슷한 구조를 따르고 그 중 수천 개의 항목이 10 개이므로 위와 같은 쿼리를 사용하면 쉽게 3000+ 결과를 반환 할 수 있습니다. 결과가 내 사이트의 검색에 사용됨에 따라 실행 시간을 낮게 유지하기 위해 결과를 100 행으로 제한합니다. 내가 같은 이름이지만 다른 ID만을 가진 "차량"을 반복하는 이유는 새 모델이 지속적으로 추가된다는 것입니다. 그러나 나는 그 모델을 파헤 치고 자하는 사람들을 위해 나이 든 모델을 계속 유지합니다! 그러나 차 이름으로 검색 할 때 가장 오래된 ID 카드를 최신 ID 카드로 반환하고 싶지 않습니다!
정답은 내가 위에 사용하는 쿼리를 적용하여 이름이 일치하는 행만 반환하지만 가장 높은 ID를 갖습니다.
이것이 가능하지 않은 경우 검색 실행 시간을 크게 늘리지 않고 원하는 것을 얻을 수있는 방법에 대한 제안을 보내 주시면 감사하겠습니다.
select max(id), vehicleName
from VEHICLES
group by vehicleName
having count(*)>=2;
0 다음 쿼리 주도 무엇입니까? LIKE '% cool %'을 (를) 사용하여 vehicle_names를 검색하면 색인이 사용되지 않습니다. – ajreal
@ajreal vehicle_attribs의 (nameId, attribute)에 PRIMARY KEY가 있습니다. – Tristan