선택 쿼리의 MySQL IF ELSEIF


81

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

 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;

7
CASE를 사용해야합니다
— Sir Rufo

답변:


202

참조를 위해 이와 같은 저장 프로 시저에서 사용한 내용 이 있지만 지금처럼 사용하도록 의도 된 것은 아닙니다. 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어차피 내면은 필요 없어 ..


2
실제로, 더 나은 보이는 예,이 옵션을 선택합니다하지만 좋은 모두 향후 참조를 위해 .. 감사합니다 nawfal 접근하도록
— 이반 브라보 카를로스

IF에 CASE를 사용하면 좋습니다. 감사합니다 Nawfal
— 사티 Kalluri

20

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)
    )
  )
)

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


1 분 전에 알아 냈습니다 ... select productoid, precio, precio_2, precio_3, IF (cant_1> 23, precio, IF (23> cant_1 && cant_2> 23, precio_2, IF (23> cant_2 && cant_3> 23, precio_3) , IF (23> cant_4, precio_4,1)))) producto의 총계는 조인을 만들고 얻는 것이 훨씬 더 쉬울 내 상사의 요청으로 인해 독립형 가격표를 만들 수 없다는 것입니다. 수량에 따라 가격이 ...
— 이반 브라보 카를로스

자세히 것은 사용하는 것case when (condition) then {computed value} when then else end
— ahnbizcad

9

중첩 된 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

4

질문 :

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/


1
귀하의 답변은 100 % 맞지만 해당 링크가 이동, 변경, 다른 링크로 병합되거나 메인 사이트가 그냥 사라지면 100 % 쓸모가 없게 될 수도 있습니다 ... :-( 그러므로 답변을 수정 하고 해당 링크를 복사하십시오. 링크에서 답변으로 이동하여이 사이트의 전체 수명 동안 답변을 보장합니다! ;-) 언제든지 답변 하단에 자료의 출처로 링크를 남겨 둘 수 있습니다.
— Donald Duck

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.