我想将第二个查询的计数结果添加到查询第一个表的结果集中,并将此子查询与第一个表结果的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不存在。
当我使用列的原始名称(相同)时,结果是错误的
当我使用别名时,会发生错误
所以我认为查询完全错误。
答案 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