mysql - 即使条件为假,也会执行真正的案例语句 - 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
查询也会被执行。
这怎么可能?
解决方案
首先使用 SELECT INTO
SELECT COUNT(*) INTO @esisteIlCampo
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'ventodelnord'
AND TABLE_NAME = 'impiegati'
AND COLUMN_NAME = 'Email';
然后你可以使用
SELECT @esisteIlCampo;
看看结果。
然后你可以在你的第二个查询中使用它。当然要确保你得到一个结果。
推荐阅读
- javascript - 淡出文本,然后替换文本,然后淡入文本
- scala - 为不带参数的 spark scala 函数编写单元测试?
- python - 在龙卷风中提供静态文件
- html - 如何在引导卡中向下添加填充?
- gitlab - 有什么方法可以在 .gitlab-ci.yml 中重新定义全局变量?
- amazon-web-services - Terraform:如何告诉 Windows EC2 实例使用整个磁盘?(用户数据中的 PowerShell)
- javascript - Cypress 和 cookies 弹出窗口:如何摆脱它
- php - PHP 无法处理复选框
- flutter - 如何在颤振/飞镖中进行音频处理?
- typescript - 当在一种情况下需要可选属性但在另一种情况下不需要时,如何优化接口对象的使用?