선택 쿼리의 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.