提问人:Giri Prasad 提问时间:3/17/2015 最后编辑:Dale KGiri Prasad 更新时间:11/1/2023 访问量:353952
选择表中除一列之外的所有列?
Select all the columns of a table except one column?
答:
79赞
Rahul Tripathi
3/17/2015
#1
您可以使用此方法从除一列之外的所有列中获取数据:-
- 将所有数据插入到临时表中
- 然后从临时表中删除不需要的列
- 从临时表中获取数据(这将不包含已删除列的数据)
- 删除临时表
像这样的东西:
SELECT * INTO #TemporaryTable FROM YourTableName
ALTER TABLE #TemporaryTable DROP COLUMN Columnwhichyouwanttoremove
SELECT * FROM #TemporaryTable
DROP TABLE #TemporaryTable
评论
1赞
3/17/2015
你怎么知道Giri使用的是哪个DBMS?
18赞
Rahul Tripathi
3/17/2015
@a_horse_with_no_name:- 我不知道这就是为什么我说这只是一种方法!
7赞
TommCatt
3/18/2015
我必须承认,这是一个新颖的解决方案。但是,每次需要执行查询时,这都会给繁忙的服务器带来相当大的负担。而这一切都是因为一个数据库开发人员对懒惰的攻击。“我不能在 select 语句中提及 258 列”确实如此!
16赞
TommCatt
3/18/2015
事实上,再想一想,我想我会和任何执行此类代码的程序员坐下来聊很久。当然,我还想与设计这样一张表的人进行长时间的讨论,然后再次与请求这种查询的分析师进行长时间的讨论。人头会滚!
2赞
Erwan Daniel
10/7/2020
它怎么可能是一个公认的答案?我正在等着看一个人问为什么这个查询这么长,有数十亿行的表......@TommCatt,我会坐在你旁边。
7赞
Sagar Joon
3/17/2015
#2
有很多选项可用,其中之一是:
CREATE TEMPORARY TABLE temp_tb SELECT * FROM orig_tb;
ALTER TABLE temp_tb DROP col_x;
SELECT * FROM temp_tb;
这里的col_x是您不想包含在 select 语句中的列。
看看这个问题:选择MySQL中除一列之外的所有列?
22赞
TommCatt
3/18/2015
#3
创建视图。是的,在视图创建语句中,您必须列出每个...和。。。每。。。田。。。由。。。名字。
一次。
然后就在那之后。select * from viewname
评论
0赞
João Pimentel Ferreira
7/4/2022
此视图在连接结束后会持续吗?
12赞
ps_prakash02
3/24/2015
#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)
4赞
Sergio Pisoni
1/1/2016
#5
无需创建新表,您可以简单地执行以下操作(例如使用 mysqli):
- 获取所有列
- 遍历所有列并删除所需的 wich
- 进行查询
$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');
0赞
Abhinav Vanam
1/21/2017
#6
在本例中,请在对象资源管理器中展开该数据库的列。将列拖入查询区域。
然后只需删除一两列您不想要的列,然后运行它。我愿意接受任何比这更容易的建议。
1赞
Omid Nasri
9/8/2017
#7
请尝试以下查询:
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;
-1赞
yasir kk
4/26/2018
#8
只有一种方法可以实现此给定列名称。没有找到其他方法。您必须列出所有列名
评论
1赞
WestCoastProjects
12/21/2019
虽然你说的可能是一般的情况,但有多个答案描述了可以达到预期结果的[角落]情况。
19赞
Fatore
3/1/2019
#9
这不是一个通用的解决方案,但某些数据库允许您使用正则表达式来指定列。
例如,对于 Hive,以下查询选择除 ds 和 hr 之外的所有列:
SELECT `(ds|hr)?+.+` FROM sales
评论
2赞
WestCoastProjects
12/21/2019
我是一个认真的开发人员,对此一无所知 - v cool。hive
3赞
lovetl2002
6/28/2020
此正则表达式存在缺陷。如果要排除两列,则仍将匹配列。那是因为正则表达式引擎渴望.虽然更改顺序可以解决此问题,但更好的方法是使用负前瞻。day
day_hour
(day|day_hour)?+.+
day_hour
|
(day_hour|day)?+.+
(?!(day|day_hour)$).+
1赞
Bowen Liu
9/15/2020
我正在使用 Hive,但不知何故它给了我一个错误,说 .似乎它正在阅读“(colname)?+.+”作为文字列名。有什么解决方案吗?谢谢。Invalid table alias or column reference
0赞
Danyal
7/11/2023
为此,应将 hive.support.quoted.identifiers 设置为 none。
0赞
Danyal
7/11/2023
@lovetl2002这是一个非常重要的问题!
10赞
Ashish Gupta
3/6/2019
#10
我只是想回应@Luann的评论,因为我总是使用这种方法。
只需右键单击“脚本”表>作为“选择以>新查询”窗口>即可。
您将看到 select 查询。只需取出要排除的列,即可获得首选的选择查询。
评论
0赞
Johny Skovdal
1/29/2020
我最终也得到了简单的解决方案 - 更简单的是使用“选择前 1000 行”。:)
7赞
Vlad Bezden
6/21/2019
#11
如果您使用的是 DataGrip,则可以执行以下操作:
- 输入 SELECT 语句
SELECT * FROM <your_table>;
- 将光标放在上面并按
*
Alt+Enter
- 您将获得带有选项的弹出菜单
Expand column list
- 单击它,它将转换为完整的列列表
*
- 现在,您可以删除不需要的列
评论
0赞
Kevin Kreps
1/19/2022
这是一个很好的解决方案
8赞
Bikash Mahato
10/29/2020
#12
您可以通过简单查询检索列名列表,然后通过像这样应用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')
评论
3赞
astentx
10/29/2020
它可以通过单个 where 子句来完成,无需从 select 中进行选择
0赞
Vaeryn
8/9/2023
#13
您可以选择数据到临时表,通过删除不需要的列来更改表,然后删除临时表。例如。我正在从 HumanResources.Employee 获取数据,使用该数据创建临时表,删除 LoginID 列,然后删除临时表:
SELECT *
INTO temp_table
FROM HumanResources.Employee
ALTER TABLE temp_table
DROP COLUMN LoginID
GO
SELECT *
FROM temp_table
DROP TABLE temp_table
评论
Script table as
Select to
New query window