SQL - 有条件地选择列(如果存在)

时间:2016-12-07 05:01:00

标签: sql postgresql

我只需要在表中存在列时选择一个列,否则可以设置为null。

下面的示例表,假设不需要marks col,所以需要检查它是否存在

表1

name marks
joe  10
john 11
mary 13

查询:

select
    name,
    marks if it exists else null as marks1 -- pseudo code
from 
    table1

选择marks会怎样排列?

4 个答案:

答案 0 :(得分:5)

SQL不允许这样做。您的结果集有两个选项:

  1. 静态包含
  2. 从表格或子查询到*tbl.*
  3. 的列扩展

    也许这会满足您的需求,SELECT * FROM table1;如果它存在,您将始终获得该列。

答案 1 :(得分:0)

试试这个

IF COL_LENGTH('your_table_name','column_name_you_want_to_select') IS NULL BEGIN 
 --This means columns does not exist or permission is denied
 END
 else 
 --Do whatever you want

答案 2 :(得分:0)

再次回答一个老问题,但这是我对这个问题的hacky 解决方案,因为我不知道如何编写SQL 函数......但是! %I 将字符串格式化为标识符,如果没有这样的表,则返回值为 NULL 并使用别名!

SELECT (SELECT format('%I', 'my_column')
 AS my_column_alias
 FROM information_schema.columns
 WHERE table_name='my_table'
 AND column_name='my_column') 
FROM source_table

希望对大家有帮助=)

答案 3 :(得分:-1)

试试这个:

IF EXISTS( SELECT 1
           FROM information_schema.columns 
           WHERE table_name='your_table' and column_name='your_column') THEN
   SELECT your_column as 'some_column'
ELSE
   SELECT NULL as 'some_column'
END IF