gpt4 book ai didi

postgresql - 选择 * 除了第 n 列

转载 作者:行者123 更新时间:2023-11-29 11:19:08 26 4
gpt4 key购买 nike

是否可以SELECT * 但没有n-th 列,例如2nd

我有一些 View 有 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';

无需列出所有列(因为它们都有不同的列名)。

最佳答案

真正的答案是你实际上做不到(参见 LINK )。几十年来,这一直是一项要求的功能,但开发人员拒绝实现它。最佳做法是提及列名而不是 *。不过,使用 * 本身就是性能损失的来源。

但是,如果您真的需要使用它,您可能需要直接从架构中选择列 -> 检查 LINK .或者如下例使用两个 PostgreSQL 内置函数:ARRAYARRAY_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';

其中字符串与标准运算符 || 连接。 COLUMN_NAME 数据类型是 information_schema.sql_identifier。此数据类型需要显式转换为 CHAR/VARCHAR 数据类型。

但这也不推荐,如果从长远来看您添加了更多的列但它们不一定是该查询所必需的怎么办?您会开始提取比您需要的更多的列。

如果选择是插入的一部分怎么办

Insert into tableA (col1, col2, col3.. coln) Select everything but 2 columns FROM tableB

列匹配将是错误的,您的插入将失败。

这是可能的,但我仍然建议为每个选择写入每个需要的列,即使几乎每一列都是必需的。

结论:

因为您已经在使用 VIEW,最简单和最可靠的方法是更改​​您的 View 并提及列名称,不包括您的第二列..

关于postgresql - 选择 * 除了第 n 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29274425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com