Kok*_*zzu 8 postgresql postgresql-9.4
例如,是否可以SELECT *但没有n-th列2nd?
我有一些视图有4列和5列(每个列都有不同的列名,第二列除外),但我不想显示第二列.
SELECT * -- how to prevent 2nd column to be selected?
FROM view4
WHERE col2 = 'foo';
SELECT * -- how to prevent 2nd column to be selected?
FROM view5
WHERE col2 = 'foo';
Run Code Online (Sandbox Code Playgroud)
无需列出所有列(因为它们都具有不同的列名).
Nad*_*_MK 11
真正的答案是你实际上不能(见LINK).这是几十年来一直被要求的功能,开发人员拒绝实现它.最佳做法是提及列名而不是*.*尽管使用本身就是性能惩罚的来源.
但是,如果您确实需要使用它,则可能需要直接从架构中选择列 - >检查LINK.或者如以下示例使用两个PostgreSQL内置函数:ARRAY和ARRAY_TO_STRING.第一个将查询结果转换为数组,第二个将数组组件连接成一个字符串.可以使用ARRAY_TO_STRING函数的第二个参数指定列表组件分隔符;
SELECT 'SELECT ' ||
ARRAY_TO_STRING(ARRAY(SELECT COLUMN_NAME::VARCHAR(50)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='view4' AND
COLUMN_NAME NOT IN ('col2')
ORDER BY ORDINAL_POSITION
), ', ') || ' FROM view4';
Run Code Online (Sandbox Code Playgroud)
其中字符串与标准运算符连接在一起||.COLUMN_NAME数据类型是information_schema.sql_identifier.此数据类型需要显式转换为CHAR/VARCHAR数据类型.
但是也不建议这样做,如果从长远来看添加更多列,但该查询不一定需要它们,该怎么办?你会开始拉出比你需要的更多的列.
如果select是插入的一部分,如果如此
Insert into tableA (col1, col2, col3.. coln) Select everything but 2 columns FROM tableB
Run Code Online (Sandbox Code Playgroud)
列匹配错误,插入失败.
这是可能的,但我仍然建议为每个选择写入所需的列,即使几乎每列都是必需的.
结论:
由于您已经在使用a VIEW,因此最简单,最可靠的方法是更改您的视图并提及列名,不包括第2列.
| 归档时间: |
|
| 查看次数: |
14500 次 |
| 最近记录: |