MySQL如何仅从列中选择(如果该列存在)

Lin*_*ing 6 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 ;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?


编辑


我在这里看到了另一个问题:MySQL,使用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
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Jam*_*ell 6

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

SELECT * 
FROM information_schema.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'db_name' 
AND TABLE_NAME = 'table_name' 
AND COLUMN_NAME = 'column_name'
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

如果IF条件为true,则将在BEGIN和END内部执行任何操作。

  • 唔。刚试过这个。但是 mysql 抱怨 IF '语法错误,意外的 IF' (2认同)
  • 您的批评可能是准确的,但没有解释就没有帮助。 (2认同)