我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
当前回答
是否有一种方法可以在不指定的情况下从表中排除列 所有的列?
以通常的方式使用声明性SQL是不行的。
我认为你提出的语法是有价值的,是好的。事实上,关系数据库语言‘Tutorial D’有一个非常相似的语法,关键字ALL BUT后面跟着一组属性(列)。
然而,SQL的SELECT *已经受到了很多批评(@Guffa的回答是一个典型的反对),所以我不认为SELECT ALL BUT会很快进入SQL标准。
我认为最好的“工作”是创建一个视图,只有你想要的列,然后选择*从那个视图。
其他回答
解决这个问题的最好方法是使用视图,您可以创建具有所需列的视图并从中检索数据
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)
您可以从devart.com获得SQL Complete,它不仅像Red Gate的SQL Prompt一样展开*通配符(如cairnz的回答所述),而且还提供了一个列选择器下拉复选框,您可以在选择列表中选中您想要的所有列,它们将自动为您插入(如果您然后取消选中某个列,它将自动从选择列表中删除)。
不,这是不可能的。如果在您的情况下可行,也许您可以创建自定义视图
如果你的数据库支持动态sql的执行,你可以写一个SP,把你不想看到的列传递给它,让它动态创建查询并返回结果给你。我认为这至少在SQL Server中是可行的
我知道这个问题很老了,但我希望这仍然能对你有所帮助。答案来自于SQL Server论坛的一个讨论。您可以将其设置为存储过程。还可以修改它以添加多个except字段。
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + ', ', ' ' ) + name from sys.columns where name not in ('colName1','colName2') and object_id = (Select id from sysobjects where name = 'tblName')
SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + 'tblName'
EXEC sp_executesql @SQL
就像其他人说的那样,没有办法做到这一点,但如果你使用Sql Server,我使用的一个技巧是将输出更改为逗号分隔,那么就这样做
select top 1 * from table
并从输出窗口中剪切整个列列表。然后你可以选择你想要的列,而不必把它们全部输入。