我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
当前回答
一位同事提出了一个不错的替代方案:
在前面的查询中执行SELECT INTO(在哪里生成或获取? 数据从)到一个表(你将删除时完成)。这将 为你创建结构。 做一个脚本创建到新的查询 窗口。 删除不需要的列。格式化剩下的列 成1的内衬,并粘贴为您的列列表。 删除表 创建。
做……
这对我们帮助很大。
其他回答
右键单击对象资源管理器中的表,选择前1000行
它会列出所有列,而不是*。然后删除不需要的列。应该比你自己打快多了。
然后,当你觉得这有点太多的工作,获得Red Gate的SQL提示,并从tbl输入ssf,转到*并再次单击选项卡。
你可以创建一个包含你想要选择的列的视图,然后你可以从视图中选择*…
是否有一种方法可以在不指定的情况下从表中排除列 所有的列?
以通常的方式使用声明性SQL是不行的。
我认为你提出的语法是有价值的,是好的。事实上,关系数据库语言‘Tutorial D’有一个非常相似的语法,关键字ALL BUT后面跟着一组属性(列)。
然而,SQL的SELECT *已经受到了很多批评(@Guffa的回答是一个典型的反对),所以我不认为SELECT ALL BUT会很快进入SQL标准。
我认为最好的“工作”是创建一个视图,只有你想要的列,然后选择*从那个视图。
像BigQuery这样的现代SQL方言提出了一个极好的解决方案。
SELECT * EXCEPT(ColumnNameX, [ColumnNameY, ...])
FROM TableA
这是一种非常强大的SQL语法,可以避免由于表列名更改而需要随时更新一长串列。而这个功能在当前的SQL Server实现中是缺失的,这是一个遗憾。希望有一天,微软Azure对数据科学家更加友好。
数据科学家喜欢有一个快速选项来缩短查询并删除一些列(由于重复或任何其他原因)。
https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers
解决这个问题的最好方法是使用视图,您可以创建具有所需列的视图并从中检索数据
example
mysql> SELECT * FROM calls;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 1 | 2016-06-22 | 1 |
| 2 | 2016-06-22 | NULL |
| 3 | 2016-06-22 | NULL |
| 4 | 2016-06-23 | 2 |
| 5 | 2016-06-23 | 1 |
| 6 | 2016-06-23 | 1 |
| 7 | 2016-06-23 | NULL |
+----+------------+---------+
7 rows in set (0.06 sec)
mysql> CREATE VIEW C_VIEW AS
-> SELECT id,date from calls;
Query OK, 0 rows affected (0.20 sec)
mysql> select * from C_VIEW;
+----+------------+
| id | date |
+----+------------+
| 1 | 2016-06-22 |
| 2 | 2016-06-22 |
| 3 | 2016-06-22 |
| 4 | 2016-06-23 |
| 5 | 2016-06-23 |
| 6 | 2016-06-23 |
| 7 | 2016-06-23 |
+----+------------+
7 rows in set (0.00 sec)