내가 기본적인 것을 가지고 있다고 가정 해 봅시다.
SELECT IF( (1 + 2) >=0, (1 + 2), 0)
FROM DUAL
분명히 3을 반환합니다.
반환하려는 쿼리 (여기서는 1 + 2)를 반복하지 않는 방법이 있습니까?
맥락을 들어 보면 이번 달에해야 할 일의 개수를 반환하고 싶지만 (최소 4 개는 완료해야 함), 이미 4 개 이상을 완료했다면 더 이상 할 필요가 없으므로 반환하고 싶습니다. 0.
내가 한 것은
IF((4 - IFNULL((LONG QUERY RETURNING THE NUMBER OF TASKS DONE THIS MONTH FOR A PARTICULAR USER ),0)) >= 0,
(4 - IFNULL((LONG QUERY RETURNING THE NUMBER OF TASKS DONE THIS MONTH FOR A PARTICULAR USER ),
0)
그러나 쿼리가 길고 서버가 동일한 쿼리를 두 번 실행하지 않기를 원하기 때문에 쿼리를 반복하지 않는 방법이 있습니까?
요청에 따라 사용자 정의 변수 를 사용할 수 있습니다 .
SELECT 1+2 INTO @tmp;
SELECT IF( @tmp >=0, @tmp, 0)
또는 하나의 라이너 를 좋아한다면
SELECT IF( (@tmp := (1+2)) >=0, @tmp, 0)
-- ^ ^
-- don't forget those parenthesis !
편집 : "테이블 선택"문에서도 작동합니다.
CREATE TABLE tbl AS SELECT 1 as a UNION SELECT 2;
SELECT SUM(a) FROM tbl INTO @tmp;
SELECT IF ( @tmp > 0, @tmp, 0);
위 쿼리 의 실행 계획 에 대해 http://sqlfiddle.com/#!2/37c33/1 을 보면 두 번째 는 테이블을 사용하지 않는 것을 볼 수 있습니다 .SELECT
BTW, 실제 예제를 사용하면 다음과 같이 작성되었을 수 있습니다.
SELECT MAX( (1+2), 0 )
-- ^^^^^ here your expression
...하지만 이것이 실제 쿼리 의 속성 이 아니라고 생각 합니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다