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

SELECT * FROM tableA

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

SELECT * [except columnA] FROM tableA

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


当前回答

就像其他人说的那样,没有办法做到这一点,但如果你使用Sql Server,我使用的一个技巧是将输出更改为逗号分隔,那么就这样做

select top 1 * from table

并从输出窗口中剪切整个列列表。然后你可以选择你想要的列,而不必把它们全部输入。

其他回答

如果有人像我一样使用MySql,请使用这个:

CREATE TABLE TempTable AS SELECT * FROM #YourTable; 

ALTER TABLE TempTable 
DROP COLUMN #YourColumn; 

SELECT * FROM TempTable; 
DROP TABLE TempTable;

下面是生成在查询中使用的列的列表(不是自动查询,因为这没有指定):

SELECT 
    GROUP_CONCAT(
        CONCAT('`', `COLUMN_NAME`, '`')
        SEPARATOR ',\n'
    ) AS `cols`
FROM information_schema.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'db'
AND `TABLE_NAME` = 'table_name_here'
AND `COLUMN_NAME` NOT IN ('exclude_col1', 'exclude_col2')

会产生:

`included_col1`,
`included_col2`,
`included_col3`

然后你可以复制这个在查询中使用:

SELECT
    `included_col1`,
    `included_col2`,
    `included_col3`
FROM db.table_name_here

简单的解决方案。在SSMS中,找到您的表,右键单击它和脚本表As,然后选择到。查询将被写入列出的每一列。注释掉或删除您不想要的列。非常快速和简单的解决方案忽略一个列。

有时同一个程序必须处理不同的数据库结构。因此,我不能在程序中使用列列表来避免选择语句中的错误。

*给出所有可选字段。我在使用之前检查数据表中是否存在字段。这就是我在select中使用*的原因。

这是我如何处理排除字段:

Dim da As New SqlDataAdapter("select * from table", cn)
da.FillSchema(dt, SchemaType.Source)
Dim fieldlist As String = ""
For Each DC As DataColumn In DT.Columns
   If DC.ColumnName.ToLower <> excludefield Then
    fieldlist = fieldlist &  DC.Columnname & ","
   End If
  Next

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