2012-12-26 33 views
4

我想選擇*如果5大於2,如果爲false選擇一個特定的列。我哪裏錯了?MySQL中的IF和Case語句

SELECT IF(5>2, *, column_x), 
CASE whereheard_name WHEN 'Newspaper' THEN 'a' 
     WHEN 'TV' THEN 'b' 
     WHEN 'Internet' THEN 'c' 
     ELSE '-' 
    END 
    AS result 
FROM whereheard; 

感謝您對上述問題的回答。下面是我使用下面的示例存儲過程:

DELIMITER $$ 

USE `registration`$$ 

DROP PROCEDURE IF EXISTS `test2`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `test2`() 
BEGIN 
    IF(5>2) THEN 
      SELECT * FROM whereheard; 
     ELSE 
      SELECT whereheard_name FROM whereheard; 
     END IF; 
END$$ 

DELIMITER ; 

這是我如何把它稱爲:

CALL test2(),   
CASE whereheard_name WHEN 'Newspaper' THEN 'a' 
     WHEN 'TV' THEN 'b' 
     WHEN 'Internet' THEN 'c' 
     ELSE '-' 
    END 
    AS result 
FROM whereheard; 

我在哪裏這個問題呢?

+0

任何想法上哪裏我出錯了存儲過程還是我怎麼叫存儲過程? – Tommy02

回答

1

你不能在SQL中完成它(我的意思是特定的語句不能有動態的列數)。你可以編寫存儲過程,雖然做這項工作:

CREATE PROCEDURE FOO ..... 
..... 
IF (5>2) THEN 
SELECT * FROM ... 
ELSE 
SELECT column1 FROM .... 
END IF;