2012-12-26 53 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;