首页 > 解决方案 > 即使条件为假,也会执行真正的案例语句 - MySQL

问题描述

仅当该列存在时,我才需要选择该列。

我以这种方式尝试过此检查:

set @esisteIlCampo = 
    (
        SELECT COUNT(*) 
        FROM 
        ( 
            SELECT * 
            FROM information_schema.COLUMNS 
            WHERE TABLE_SCHEMA = 'ventodelnord' 
            AND TABLE_NAME = 'impiegati' 
            AND COLUMN_NAME = 'Email'
        ) AS t 
    ) > 0

If 如果列电子邮件存在,则为 1,如果不存在,则为 0。

然后我有这个查询来使用它:

SELECT
    `i`.`IDImpiegato` AS `ID`,
    `i`.`TelDomicilio` AS `Numero Di Telefono`,
    CONCAT(`i`.`Nome`, ' ', `i`.`Cognome`) AS `Nome Completo`,
    (
        CASE WHEN
        @esisteIlCampo = 1 
        THEN
        (
            SELECT impiegati.Email from impiegati limit 1 
        ) 
        ELSE
        (
           SELECT "Campo Mancante"
        )
        END
    ) as "Email",
    'Impiegati' AS `Tabella di provenienza`
FROM
    `impiegati` `i`;

但即使@esisteIlCampo是 0,所以@esisteIlCampo = 1计算结果为 false,SELECT impiegati.Email from impiegati limit 1查询也会被执行。

这怎么可能?

标签: mysqlsqldatabase

解决方案


首先使用 SELECT INTO

SELECT COUNT(*) INTO @esisteIlCampo
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'ventodelnord' 
    AND TABLE_NAME = 'impiegati' 
    AND COLUMN_NAME = 'Email';

然后你可以使用

SELECT @esisteIlCampo; 

看看结果。

然后你可以在你的第二个查询中使用它。当然要确保你得到一个结果。


推荐阅读