使用 CASE 语句检查 MySQL 查询中是否存在

问题描述 投票:0回答:1

我在 mysql 查询中使用 CASE 语句,我必须检查同一查询中是否存在列。

可以这样做吗?如果是的话请帮忙。

以我的查询为例 -

SELECT 
CASE column1
WHEN 'status' THEN 'status'
WHEN 'value' THEN 
(select CASE id
WHEN id IS NOT NULL THEN 'status1' ELSE 'status2'
END AS ScheduleStatus
from table1
where condition )
END AS Status
FROM table2 
LEFT JOIN table1 
ON ... 
WHERE condition ..;

在上面的查询中,当执行它时,即使他的条件满足,我也会得到结果

status2
(其他部分)。 如果当时不存在
id
行,则结果应为
status1
。 请纠正我。

mysql
1个回答
0
投票

请参阅该页面中的第三个答案 -

if not exists (select
                 column_name
           from
                 INFORMATION_SCHEMA.columns
           where
                 table_name = 'MyTable'
                 and column_name = 'MyColumn')

它也应该在 mySql 中工作。

或者你可以尝试这个 -

SELECT * 
FROM information_schema.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'dbName' 
AND TABLE_NAME = 'tableName' 
AND COLUMN_NAME = 'columnName'

如果您想在 CASE 内对此进行检查,请使用获取 varchar - 列名的 FUNCTION 来执行此操作,如果该列不存在,则返回 '' 或 NULL。 将列名称替换为函数 -

CREATE FUNCTION Func_Check_Exists(columnName CHAR(20)) 
RETURNS CHAR(20)
DETERMINISTIC
BEGIN 

 RETURN ...;
END;

在你的代码中 -

SELECT CASE Func_Check_Exists('column1') WHEN 'status' THEN ...
© www.soinside.com 2019 - 2024. All rights reserved.