我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
当前回答
像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
其他回答
在SQL (SQL Server)中自动做到这一点的方法是:
declare @cols varchar(max), @query varchar(max);
SELECT @cols = STUFF
(
(
SELECT DISTINCT '], [' + name
FROM sys.columns
where object_id = (
select top 1 object_id from sys.objects
where name = 'MyTable'
)
and name not in ('ColumnIDontWant1', 'ColumnIDontWant2')
FOR XML PATH('')
), 1, 2, ''
) + ']';
SELECT @query = 'select ' + @cols + ' from MyTable';
EXEC (@query);
您可以从devart.com获得SQL Complete,它不仅像Red Gate的SQL Prompt一样展开*通配符(如cairnz的回答所述),而且还提供了一个列选择器下拉复选框,您可以在选择列表中选中您想要的所有列,它们将自动为您插入(如果您然后取消选中某个列,它将自动从选择列表中删除)。
右键单击对象资源管理器中的表,选择前1000行
它会列出所有列,而不是*。然后删除不需要的列。应该比你自己打快多了。
然后,当你觉得这有点太多的工作,获得Red Gate的SQL提示,并从tbl输入ssf,转到*并再次单击选项卡。
我知道这有点过时了,但我也遇到过同样的问题,正在寻找答案。然后我让一个高级开发人员给我展示了一个非常简单的技巧。
如果使用management studio查询编辑器,请展开数据库,然后展开从中选择的表,以便可以看到列文件夹。
在选择语句中,只需突出显示上面引用的列文件夹,并将其拖放到查询窗口中。它将粘贴表的所有列,然后简单地从列列表中删除标识列…
这不会节省从数据库加载的时间。但是,你总是可以在数组中取消你不想要的列。我在一个表中有几个列,但不想要一个特别的列。我太懒了,没有把它们都写在SELECT语句中。
$i=0;
$row_array = array();
while($row = mysqli_fetch_assoc($result)){
$row_array[$i]=$row;
unset($row_array[$i]['col_name']);
$i++;
}