나는 MySQL 데이터베이스에 테이블이 있습니다 (weight
). 다음 스냅 샷에서 볼 수 있습니다.추가 조건이있는 EXISTS를 사용하여 최대 행 얻기
weight 테이블 :
:
나는 다음과 같은 질의를 필요로한다.
SELECT *
FROM weight w
WHERE w.weight_id IN (SELECT MAX(ww.weight_id)
FROM weight ww
WHERE ww.weight BETWEEN 0 AND 60);
는 언어 학적 weight
열은 0 (예를 들어) 60 사이의 값을 갖는 행 중에서 weight
표에서 최대 행을 얻었다.
EXISTS()
을 사용하여 동일한 쿼리를 원합니다. 다음 시도는 성공하지 못합니다.
SELECT *
FROM weight w
WHERE NOT EXISTS (SELECT 1
FROM weight ww
WHERE w.weight_id < ww.weight_id
AND ww.weight BETWEEN 0 AND 60);
은 최대 행합니다 (BETWEEN
조건 (AND ww.weight BETWEEN 0 AND 60
)는 다음 생략되어있는 경우,이 테이블의 모든 행에서 최대 반환하지만 바람직하지부터 모든 행을 반환한다. 그것은 최대 행을 반환해야 BETWEEN
조건에 따라 필터를 적용한 후).
약간 수정 된 버전은 행을 반환하지 않습니다.
SELECT *
FROM weight w
WHERE EXISTS (SELECT 1
FROM weight ww
WHERE w.weight_id = ww.weight_id
AND ww.weight BETWEEN 0 AND 60
AND NOT EXISTS(SELECT 1
FROM weight www
WHERE ww.weight_id < www.weight_id))
EXISTS()
을 계속 사용할 수 있습니까?
하위 쿼리가 FROM
절에서 지원되지 않는 ORM 프레임 워크를 사용하고 있습니다. 따라서 FROM
의 하위 쿼리가 제외 된 경우 훨씬 더 좋습니다.
이 쿼리는 차례로 다른 관련 테이블 (다른 EXISTS()와 조인 일 수 있음)에서 다른 쿼리로 래핑 될 것입니다. 여기서 LIMIT 절은 sub-select 문에서 작동하지 않습니다 (나는 단순화를 위해 실제 시나리오를 게시하지 않았다). – Tiny