我只需要在表中存在列时选择一个列,否则可以设置为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
会怎样排列?
答案 0 :(得分:5)
SQL不允许这样做。您的结果集有两个选项:
*
和tbl.*
也许这会满足您的需求,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