4

5 が 2 より大きい場合は * を選択し、false の場合は特定の列を選択します。どこが間違っていますか?

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; 

これのどこが間違っているのですか?

4

1 に答える 1

1

SQL では実行できません (つまり、特定のステートメントに動的な列数を含めることはできません)。ただし、ジョブを実行するストアド プロシージャを作成できます。

CREATE PROCEDURE FOO .....
.....
IF (5>2) THEN
 SELECT * FROM ...
ELSE
 SELECT column1 FROM ....
END IF;
于 2012-12-26T17:10:07.333 に答える