【问题标题】:Select all columns except ONE with SQL server使用 SQL Server 选择除 ONE 之外的所有列
【发布时间】:2021-02-09 16:51:47
【问题描述】:

我从 SQL 服务器开始。我加入了两张桌子。它们都包含一个名为“id”的列。

在内连接之后,我现在有两个具有相同名称(“id”)的列。

我该如何解决这个问题(- 无需输入我想保留的所有列。我有 200 列-)。

declare @contract_number nvarchar(255) = '2019.37080'
declare @reportingperiod nvarchar(255) = '2019-Q1'
 

select *
from ifrs17.output_bba
inner join ifrs17.unit_of_account 
    on unit_of_account.contract_number = output_bba.unit_of_account_number
    and unit_of_account.reporting_period = output_bba.reporting_period
    and unit_of_account.currency_source = output_bba.currency_source
where 
    output_bba.unit_of_account_number = @contract_number
    and output_bba.meta_id in ( select max(meta_id) from ifrs17.output_bba where contract_number = @contract_number and legal_entity_code = 'SR' group by reporting_period )
    and unit_of_account.meta_id in ( select max(meta_id) from ifrs17.unit_of_account where contract_number = @contract_number and legal_entity_code = 'SR' group by reporting_period )
    and output_bba.time_index > 0
    and output_bba.reporting_period = @reportingperiod

【问题讨论】:

  • 你不能 - 所以开始打字吧。有一些工具和技术可以提供帮助,但这仍然取决于您使用“*”作为列列表。
  • 方法很简单,列出你需要的列,不要用*。列出你需要的列,你只会得到你需要的列。另外,我建议在您的查询中为您的对象提供别名;它会让你的 SQL 更加简洁。
  • 我接受使用 SELECT * 的唯一时间是 a) 同时仍在为您尝试获取 JOIN/WHERE 正确位置的查询进行原型设计,以及 b) 在 @ 987654325@测试。否则,使用您神话般的“除一列之外的所有内容”功能,当有人在您不需要的每一行中添加额外的 2GB 文档列时会发生什么。选择您实际需要的列,我怀疑所有 200 列都是相关的。
  • 我不同意,@TheImpaler,Damien 给出了一个(非常好的)理由。应该* EXCEPT SomeColumn这样的语法。我当然可以看到懒惰的人在 VIEW 的定义中使用这样的语法,那将是灾难性的。

标签: sql sql-server inner-join


【解决方案1】:

您无需键入列名。拖放工作。

打开 SSMS 对象资源管理器。单击数据库。单击您的数据库。单击表格。单击表格。您将看到“列”。将“列”(标签,而不是单个列名)拖到查询窗口中。所有列名都显示为逗号分隔的列表。将“id”更改为“id as FirstID”,对第二个表重复此操作。当您使用需要指定列名的“SET IDENTITY_INSERT”时也很有帮助。

【讨论】:

  • 感谢@jim 的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 2017-09-24
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 2018-11-23
  • 2013-03-23
相关资源
最近更新 更多