繁体   English   中英

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

[英]How to select all the columns of a table except one column?

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

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

有没有其他方法可以做到?

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

  1. 将所有数据插入临时表
  2. 然后从临时表中删除您不想要的列
  3. 从临时表中获取数据(这将不包含删除列的数据)
  4. 删除临时表

像这样的东西:

SELECT * INTO #TemporaryTable FROM YourTableName

ALTER TABLE #TemporaryTable DROP COLUMN Columnwhichyouwanttoremove

SELECT * FROM #TemporaryTable 

DROP TABLE #TemporaryTable 

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

一次。

然后只需select * from viewname之后。

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

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

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

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

您可以从 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)

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

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

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

看看这个问题: 在 MySQL 中选择除一列之外的所有列?

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

只需右键单击表 > 脚本表为 > 选择到 > 新建查询窗口。

您将看到选择查询。 只需取出要排除的列,即可获得首选的选择查询。 在此处输入图片说明

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

  1. 获取所有列
  2. 遍历所有列并删除您想要的
  3. 提出您的查询

$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');

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

  1. 输入您的 SELECT 语句SELECT * FROM <your_table>;
  2. 将光标放在*并按Alt+Enter
  3. 您将获得带有Expand column list选项的弹出菜单
  4. 单击它,它将使用完整的列列表转换*
  5. 现在您可以删除不需要的列

这是有关如何执行此操作的示例的链接。

您可以通过简单的查询检索列名列表,然后通过像这样的 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')

尝试以下查询:

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;

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

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

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

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

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

还有其他方法吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM