用于第二个表中的count的SQL Server子查询

时间:2017-03-27 09:15:50

标签: sql-server correlated-subquery

我想将第二个查询的计数结果添加到查询第一个表的结果集中,并将此子查询与第​​一个表结果的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)。如果我使用相同的名称,SubQuery就像" ...其中ID_Field = ID_Field .."这总是返回一个Reslut,因为它没有连接查询("选择一个其中x = x"返回表2中的任何记录)。

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

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

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

  2. 当我使用别名时,会发生错误

  3. 所以我认为查询完全错误。

3 个答案:

答案 0 :(得分: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的回答中建议的那样会有更好的表现。

答案 1 :(得分:0)

这样的东西?

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

答案 2 :(得分:0)

尝试此查询一旦它可以帮助您。

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