【问题标题】:SQL Server subquery for count in 2nd table第二个表中计数的 SQL Server 子查询
【发布时间】:2017-03-27 09:15:49
【问题描述】:

我想将第二个查询的计数结果添加到查询第一个表的结果集中,并将这个子查询与第​​一个表结果的 ID 连接起来。这个简化的代码解释了它:

Select 
    ID_Field_Table1, 
    (Select Count(x) 
     From Table2 
     Where ID_Field_Table2 = ID_Field_Table1) As mycount 
From Table1

什么是正确的语法? 谢谢

此代码已简化,但结构相同。在我的数据库中,ID_Field_Table2 和 ID_Field_Table1 具有相同的名称(比如说 ID_Field)。如果我使用相同的名称,则子查询类似于“...Where ID_Field = ID_Field..”,这总是返回一个 Reslut,因为它没有连接查询(“Select a Where x = x”返回表 2)。

Select 
    ID_Field AS ID1, 
    (Select Count(x) 
     From Table2 
     Where ID_Field = ID1) As mycount 
From Table1

它只是返回一个错误,说 ID1 不存在。

  1. 当我使用列的原始名称(相同)时,结果是错误的

  2. 当我使用别名时,出现错误

所以我认为查询是错误的。

【问题讨论】:

  • 您的查询对我来说似乎没问题。 “不工作”是什么意思?
  • 当问题陈述很简单时,很难提供解决方案,“它不起作用”。请edit您的问题更完整地描述您预期会发生什么以及这与实际结果有何不同。请参阅 How to Ask 以获取有关什么是好的解释的提示。

标签: sql-server correlated-subquery


【解决方案1】:

好吧,你不能使用 select 子句中定义的别名,但是你可以使用 from 子句中定义的别名:

Select 
    ID_Field AS ID1, 
    (Select Count(x) 
     From Table2 
     Where ID_Field = t1.ID_Field) As mycount 
From Table1 t1

你也可以不用别名,因为子查询是针对不同的表的:

Select 
    ID_Field AS ID1, 
    (Select Count(x) 
     From Table2 
     Where ID_Field = Table1.ID_Field) As mycount 
From Table1

但是,我怀疑按照 esta 的回答中的建议使用左连接到派生表的查询会有更好的性能。

【讨论】:

  • 那行得通。谢谢你。现在我看到了,我想知道为什么我以前没有尝试过;)
【解决方案2】:

这样的?

Select 
    Table1.ID_Field_Table1,
    T2.MYCOUNT    
From Table1
LEFT JOIN (SELECT ID_Field_Table2, COUNT(x) AS MYCOUNT FROM TABLE2 GROUP BY ID_FIELD_TABLE2) T2 ON T2.ID_Field_Table2=Table1.ID_Field_Table1

【讨论】:

    【解决方案3】:

    试试这个查询,它可能对你有帮助。

    Select ID_Field_Table1,COUNT_NBR 
    cross apply 
    (
    Select Count(x) as COUNT_NBR
         From Table2 
         Where ID_Field_Table2 = ID_Field_Table1
         group by ID_Field_Table1
    ) As mycount 
    From Table1
    

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 2018-05-16
      • 2012-03-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多