我们都知道,要从表中选择所有列,可以使用

SELECT * FROM tableA

是否有一种方法可以在不指定所有列的情况下从表中排除列?

SELECT * [except columnA] FROM tableA

我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。


当前回答

Postgres sql有一种方法

请参考: http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html

信息Schema Hack方法

SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
        FROM information_schema.columns As c
            WHERE table_name = 'officepark' 
            AND  c.column_name NOT IN('officeparkid', 'contractor')
    ), ',') || ' FROM officepark As o' As sqlstmt

对于我的特定示例表,上面的代码生成如下所示的sql语句

选择o.officepark、o.owner o.squarefootage 从办公室公园As o

其他回答

是否有一种方法可以在不指定的情况下从表中排除列 所有的列?

以通常的方式使用声明性SQL是不行的。

我认为你提出的语法是有价值的,是好的。事实上,关系数据库语言‘Tutorial D’有一个非常相似的语法,关键字ALL BUT后面跟着一组属性(列)。

然而,SQL的SELECT *已经受到了很多批评(@Guffa的回答是一个典型的反对),所以我不认为SELECT ALL BUT会很快进入SQL标准。

我认为最好的“工作”是创建一个视图,只有你想要的列,然后选择*从那个视图。

不,这是不可能的。如果在您的情况下可行,也许您可以创建自定义视图

如果你的数据库支持动态sql的执行,你可以写一个SP,把你不想看到的列传递给它,让它动态创建查询并返回结果给你。我认为这至少在SQL Server中是可行的

右键单击对象资源管理器中的表,选择前1000行

它会列出所有列,而不是*。然后删除不需要的列。应该比你自己打快多了。

然后,当你觉得这有点太多的工作,获得Red Gate的SQL提示,并从tbl输入ssf,转到*并再次单击选项卡。

如果你正在使用mysql-workbench,你可以右键单击表资源管理器,然后单击“发送到SQL编辑器->选择所有语句”。

它会发送一条语句,比如“Select col1, col2,…”从表”。

然后删除那些你不需要的。

您可以使用REGEX列规范。

下面的查询选择除ds和hr之外的所有列 选择(ds |人力资源)? +。+来自销售