我在 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
。
请纠正我。
请参阅该页面中的第三个答案 -
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 ...