ALL
하위 쿼리와 관련된 WHERE
절 조건이 있습니다. 하위 쿼리 결과가 비어있는 경우가 있는데이 경우 표현식은 항상 true
으로 계산되지만이 값을 false
으로 지정해야합니다.postgresql ALL 하위 쿼리가 비어 있음을 평가합니다.
예를 들어, 드라이버 테이블, 경로 테이블 및 각 드라이버가 구동 한 경로를 보여주는 다 대다 상호 작용 테이블이 있다고 가정합니다. 저는 50 마일 이상을 주행하는 운전자 만 찾고 싶습니다.
SELECT * FROM driver
WHERE 50 < ALL(
SELECT miles FROM route, driver_route
WHERE driver_route.route_id = route.id AND
driver_route.driver_id = driver.id)
이 쿼리에는 원하는 결과가 아닌 결과의 경로를 주도한 드라이버가 포함됩니다.
나는 coalesce를 사용해 보았지만 ERROR: more than one row returned by a subquery used as an expression
에 달했다. 내가 충분히 일반적으로 서로 다른 유형의 쿼리에 적용 할 수의 구조를 찾고 있어요
SELECT * FROM driver
WHERE 50 < COALESCE((
SELECT ALL(SELECT miles FROM route, driver_route
WHERE driver_route.route_id = route.id AND
driver_route.driver_id = driver.id)),
0);
: 저는 여기에 해당 쿼리를 표현한 방법입니다.
감사합니다 . 결과는 같습니다. 내가 올바르게 존재한다는 것을 이해한다면,이 쿼리는 명시 적으로 빈 결과를 포함하는데, 이는 피하려고하는 것입니다. – user3747260
@ user3747260은'AND EXISTS'에 맞춰 적어도 하나의'miles> 50 '을 요구합니다. – flutter
물론입니다. 중복에도 불구하고 쿼리 플래너가이를 잘 처리하는 것으로 보입니다. 나는 이것이 일반적인 문제가 아니며 더 표준적인 해결책이 없다는 사실에 놀랐다.하지만 당신은 잘 작동하는 것 같다. 감사. – user3747260