Mysql如何仅在列存在时从列中选择

标签 mysql select if-statement exists

我需要能够检查列是否存在,如果存在,我想从中进行选择。

我正在尝试很多不同的变体,但我什至不确定这是否可行。

这是我最近的尝试:

SELECT
IF (EXISTS (SELECT `Period` AS `Period` FROM myview), `PERIOD`,
IF (EXISTS (SELECT `Country` AS `COUNTRY` FROM myview),`COUNTRY` FROM myview ;

有什么想法吗?


编辑


我在这里看到了另一个问题:MySQL, Check if a column exists in a table with SQL

但我仍然对 if 语句感到困惑。我可以使用上面问题中的答案检查该列是否存在。但我的问题是 - 如果发现结果为真,如何从该列执行 select 语句。


编辑 2


下面的答案表明我应该使用 BEGIN 和 END 语句,这是有道理的。但是,我的查询在第一行提示。它说“意外的 IF”——任何人都可以确认这是否是 MYSQL 的正确语法?

if( exists (SELECT * 
    FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA = 'db_name' 
    AND TABLE_NAME = 'view_name' 
    AND COLUMN_NAME = 'column_name') )
begin
    SELECT `column_name` FROM `view_name`
end

提前致谢。

最佳答案

此查询将为您提供一列是否存在。

SELECT * 
FROM information_schema.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'db_name' 
AND TABLE_NAME = 'table_name' 
AND COLUMN_NAME = 'column_name'

如果您想检查某些列是否存在,然后执行选择语句,您需要先检查您的列是否存在。然后执行选择:

if (exists (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'myview' AND COLUMN_NAME = 'Period') and exists (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'myview' AND COLUMN_NAME = 'Country'))
begin
    select `Period`, `Country` from myview
end

如果 IF 条件为真,那么您将执行 BEGIN 和 END 内的任何内容。

关于Mysql如何仅在列存在时从列中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24194223/

相关文章:

php - 确保 MySQL 数据库中的个人数据黑客安全?

java - MySQL 创建或修改表

mysql - 长级联 MySQL 查询

php - SELECT 语句不能正常工作

MySQL 5.5 SELECT DISTINCT - 如何返回多个没有查询重复的列?

if-statement - Java8 : Implement multiple conditional statements with stream API

if-statement - 为什么不评估此 Cobol 代码中的第二个 if 语句 (OpenCOBOL)?

php - 使用 codeigniter 计算数据库中的行数

php - 使用 20.000 条记录更新 MySql 数据库时出现问题

r - 在函数中使用 %>% 和 ifelse()