Nice programing

선택 쿼리의 MySQL IF ELSEIF

nicepro 2020. 11. 22. 20:33
반응형

선택 쿼리의 MySQL IF ELSEIF


사용자가 선택한 수량에 따라 제품의 다른 가격을 선택하려고합니다. 이것은 내가 작업중 인 쿼리입니다 (구문 오류가 있음).

 select id, 
    (SELECT 
    IF(qty_1<='23',price,1)
    ELSEIF(('23'>qty_1 && qty_2<='23'),price_2,1)
    ELSEIF(('23'>qty_2 && qty_3<='23'),price_3,1)
    ELSEIF('23'>qty_3,price_4,1)
    END IF) as total 
 from product;

참조를 위해 이와 같은 저장 프로 시저에서 사용한 내용 있지만 지금처럼 사용할 수는 없습니다. IF과 같이 사용할 수 있습니다 duskwuff. 그러나 Case진술은 눈에 더 좋습니다. 이렇게 :

select id, 
    (
    CASE 
        WHEN qty_1 <= '23' THEN price
        WHEN '23' > qty_1 && qty_2 <= '23' THEN price_2
        WHEN '23' > qty_2 && qty_3 <= '23' THEN price_3
        WHEN '23' > qty_3 THEN price_4
        ELSE 1
    END) AS total
 from product;

이것은 더 깨끗해 보입니다. SELECT어차피 내면은 필요 없어 ..


IF()MySQL에서는 제어 구조가 아니라 삼항 함수입니다. 첫 번째 인수의 조건이 참이면 두 번째 인수를 반환합니다. 그렇지 않으면 세 번째 인수를 반환합니다. 해당 ELSEIF()기능이나 END IF키워드 가 없습니다 .

당신이 얻은 것과 가장 가까운 것은 다음과 같습니다.

IF(qty_1<='23', price,
  IF('23'>qty_1 && qty_2<='23', price_2,
    IF('23'>qty_2 && qty_3<='23', price_3,
      IF('23'>qty_3, price_4, 1)
    )
  )
)

조건이 모두 나에게 의미가있는 것은 아니지만 (일부 부주의로 반전 될 수있는 것처럼 보입니까?)하지만 정확히 무엇을 달성하려고하는지 알지 못하면 고치기가 어렵습니다.


중첩 된 if () 함수를 사용할 때 MySQL 5.1.72에서 버그를 발견했습니다. .... 열 변수의 값 (예 : qty_1)이 두 번째 if () 내에서 비어있어 쓸모 없게 만듭니다. 대신 다음 구성을 사용하십시오.

case 
  when qty_1<='23' then price
  when '23'>qty_1 && qty_2<='23' then price_2
  when '23'>qty_2 && qty_3<='23' then price_3
  when '23'>qty_3 then price_4
  else 1
end

질문 :

SELECT id, 
   IF(qty_1 <= '23', price,
   IF(('23' > qty_1 && qty_2 <= '23'), price_2,
   IF(('23' > qty_2 && qty_3 <= '23'), price_3,
   IF(('23' > qty_2 && qty_3<='23'), price_3,
   IF('23' > qty_3, price_4, 1))))) as total 
FROM product;

MySQL if - else제어 구조 또는 IF함수를 사용할 수 있습니다 .

참조 :
http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/


As per Nawfal's answer, IF statements need to be in a procedure. I found this post that shows a brilliant example of using your script in a procedure while still developing and testing. Basically, you create, call then drop the procedure:

https://gist.github.com/jeremyjarrell/6083251

참고URL : https://stackoverflow.com/questions/13887616/mysql-if-elseif-in-select-query

반응형