MySQL中的IF和CASE语句

4
如果5大于2,我想选择所有列,否则只选择特定的一列。请问我的做法有哪些问题?
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; 

我在这里做错了什么?


我在存储过程中出了什么问题,还是我调用存储过程的方式有误?你有什么想法吗? - Tommy02
1个回答

1

你不能在SQL中这样做(我的意思是特定语句不能有动态列数)。不过你可以编写存储过程来完成这项工作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接