如何选择表格中除一列以外的所有列?

Posted

技术标签:

【中文标题】如何选择表格中除一列以外的所有列?【英文标题】:How to select all the columns of a table except one column? 【发布时间】:2015-03-17 09:18:18 【问题描述】:

我有将近 259 列我不能在 SELECT 语句中提及 258 列。

还有其他方法吗?

【问题讨论】:

您使用的是哪个 DBMS? 您已经有了一个包含 259 列的表。为什么要在意少选一个?你已经做了一个数据库的怪物和一个结果集的怪物,一列不会有什么不同。 不,这是不可能的。您必须列出每一列(或编写一个为您执行此操作的函数)。但是许多 SQL 客户端可以帮助您通过自动完成自动“生成”该列表。另外,您使用的是哪个 DBMS?后格雷斯?甲骨文? @GiriPrasad 在 Management Studio 中,您可以右键单击表格,选择 Script table as -> Select to -> New query window。这将生成一个包含所有列的选择,您可以删除不需要的列。 SQL exclude a column using SELECT * [except columnA] FROM tableA? 的可能重复项 【参考方案1】:

您可以使用这种方法从除一列之外的所有列中获取数据:-

    将所有数据插入到临时表中 然后从临时表中删除不需要的列 从临时表中获取数据(这不会包含被移除列的数据) 删除临时表

类似这样的:

SELECT * INTO #TemporaryTable FROM YourTableName

ALTER TABLE #TemporaryTable DROP COLUMN Columnwhichyouwanttoremove

SELECT * FROM #TemporaryTable 

DROP TABLE #TemporaryTable 

【讨论】:

你怎么知道 Giri 正在使用哪个 DBMS? @a_horse_with_no_name:- 我不知道这就是为什么我说它只是一种方法 感谢您的回复。似乎是一个有用的解决方案 我必须承认,这是一个新颖的解决方案。但是,每次需要执行查询时,这会给繁忙的服务器带来相当大的负载。而这一切都是因为一位数据库开发人员受到了懒惰的攻击。 “我确实不能在 select 语句中提到 258 列”! 事实上,再想一想,我想我会与任何执行此类代码的程序员坐下来很长时间。当然,我还想与设计此类表格的人进行长时间的讨论,然后再与请求此类查询的分析师进行一次长时间的讨论。人,头会滚动!【参考方案2】:

创建一个视图。是的,在视图创建语句中,您必须列出每个...和...每个...字段...按...名称。

一次。

然后就是select * from viewname

【讨论】:

【参考方案3】:

这不是通用解决方案,但某些数据库允许您使用正则表达式来指定列。

例如,在 Hive 的情况下,以下查询选择除 ds 和 hr 之外的所有列:

SELECT `(ds|hr)?+.+` FROM sales

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select#LanguageManualSelect-REGEXColumnSpecification

【讨论】:

我是一个认真的 hive 开发人员,但我不知道这一点 - 很酷。 这个正则表达式有缺陷。如果要排除 dayday_hour 两列,(day|day_hour)?+.+ 仍将匹配 day_hour 列。那是因为正则表达式引擎渴望|。虽然将顺序更改为(day_hour|day)?+.+ 可以解决此问题,但更好的方法是使用负前瞻,(?!(day|day_hour)$).+ 我正在使用 Hive,但不知何故它给了我一个错误,说 Invalid table alias or column reference。似乎它正在读取“(colname)?+。+”作为文字列名。有什么解决办法吗?谢谢。【参考方案4】:

您可以从 sys.columns 表中获取列名详细信息

尝试以下查询:

SELECT * FROM SYS.COLUMNS 
WHERE object_id = OBJECT_ID('dbo.TableName') 
AND [Name] <> 'ColumnName'

DECLARE @sql as VARCHAR(8000)
SET @sql = 'SELECT '

SELECT @sql += [Name] + ', ' FROM SYS.COLUMNS 
WHERE object_id = OBJECT_ID('dbo.TableName') 
AND [Name] <> 'ColumnName'

SELECT @sql += ' FROM Dbo.TableName'

EXEC(@sql)

【讨论】:

【参考方案5】:

有很多可用的选项,其中之一是:

 CREATE TEMPORARY TABLE temp_tb SELECT * FROM orig_tb;
 ALTER TABLE temp_tb DROP col_x;
 SELECT * FROM temp_tb;

这里 col_x 是您不想包含在 select 语句中的列。

看看这个问题:Select all columns except one in mysql?

【讨论】:

感谢您的回复【参考方案6】:

我只是想回应@Luann 的评论,因为我一直使用这种方法。

只需右键单击表格 > 将表格编写为 > 选择到 > 新建查询窗口。

您将看到选择查询。只需取出您要排除的列,您就有了首选的选择查询。

【讨论】:

我也得到了简单的解决方案 - 更简单的是使用“选择前 1000 行”。 :)【参考方案7】:

如果您使用DataGrip,您可以执行以下操作:

    输入您的 SELECT 语句SELECT * FROM &lt;your_table&gt;; 将光标放在* 上,然后按Alt+Enter 您将获得带有Expand column list 选项的弹出菜单 点击它,它会将* 转换为完整的列列表 现在您可以删除不需要的列

Here is a link for an example on how to do it.

【讨论】:

这是一个很好的解决方案【参考方案8】:

您可以通过简单查询来检索列名列表,然后通过 apply where 查询删除这些列。

SELECT * FROM (
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
) AS allColumns
WHERE allColumns.COLUMN_NAME NOT IN ('unwantedCol1', 'unwantedCol2')

【讨论】:

可以用一个where子句来完成,不需要从select中选择【参考方案9】:

无需创建新表,您可以简单地做(例如使用 mysqli):

    获取所有列 遍历所有列并删除您想要的内容 提出您的问题

$r = mysqli_query('SELECT column_name FROM information_schema.columns WHERE table_name = table_to_query');

$c = count($r); while($c--) if($r[$c]['column_name'] != 'column_to_remove_from_query') $a[] = $r[$c]['column_name']; else unset($r[$c]);

$r = mysqli_query('SELECT ' . implode(',', $a) . ' FROM table_to_query');

【讨论】:

【参考方案10】:

尝试以下查询:

DECLARE @Temp NVARCHAR(MAX); 
DECLARE @SQL NVARCHAR(MAX);

SET @Temp = '';
SELECT @Temp = @Temp + COLUMN_NAME + ', ' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='Person' AND COLUMN_NAME NOT IN ('Id')  

SET @SQL = 'SELECT ' + SUBSTRING(@Temp, 0, LEN(@Temp)) +' FROM [Person]';
EXECUTE SP_EXECUTESQL @SQL;

【讨论】:

【参考方案11】:

在您的情况下,在对象资源管理器中展开该数据库的列。将列拖入查询区域。

然后只需删除一两列您不想要的列,然后运行它。我愿意接受任何比这更容易的建议。

【讨论】:

【参考方案12】:

只有一种方法可以实现这个给定的列名。没有找到其他方法。您必须列出所有列名

【讨论】:

虽然您所说的可能是一般情况,但有多个答案描述了可以实现预期结果的[角落]案例。

以上是关于如何选择表格中除一列以外的所有列?的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的数组(或矩阵)中提取除一列之外的所有列?

选择除一列之外的所有列[重复]

在EXCEL中用VBA操作WORD表格:怎样选择一个表格中除第一行以外的任意连续行(比如第2到4行)?

选择 Mariadb 中除顶行以外的所有行

如何将 summarise_each 应用于除一列之外的所有列? [复制]

如何在一个除一列之外的所有列都相同的 Pandas DataFrame 中合并观察结果?