SQL 第二个计数的服务器子查询 table
SQL Server subquery for count in 2nd table
我想将第二个查询的计数结果添加到查询第一个 table 的结果集中,并将此子查询与第一个 Table 结果的 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..”并且这总是 Returns 一个Reslut,因为它没有连接查询("Select a Where x = x" returns 中的任意记录 table 2).
Select
ID_Field AS ID1,
(Select Count(x)
From Table2
Where ID_Field = ID1) As mycount
From Table1
只是returns一个错误,说ID1不存在
当我使用列的原始名称(相同)时,结果是错误的
使用别名时出现错误
所以我认为查询是完全错误的。
是这样的吗?
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
试试这个查询,它可能对你有帮助。
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
嗯,你不能使用在 select 子句中定义的别名,但你可以使用在 from 子句中定义的别名:
Select
ID_Field AS ID1,
(Select Count(x)
From Table2
Where ID_Field = t1.ID_Field) As mycount
From Table1 t1
你也可以不使用别名,因为子查询是针对不同的 table:
Select
ID_Field AS ID1,
(Select Count(x)
From Table2
Where ID_Field = Table1.ID_Field) As mycount
From Table1
但是,我怀疑按照 esta 的回答中的建议使用左连接到派生 table 的查询会有更好的性能。
我想将第二个查询的计数结果添加到查询第一个 table 的结果集中,并将此子查询与第一个 Table 结果的 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..”并且这总是 Returns 一个Reslut,因为它没有连接查询("Select a Where x = x" returns 中的任意记录 table 2).
Select
ID_Field AS ID1,
(Select Count(x)
From Table2
Where ID_Field = ID1) As mycount
From Table1
只是returns一个错误,说ID1不存在
当我使用列的原始名称(相同)时,结果是错误的
使用别名时出现错误
所以我认为查询是完全错误的。
是这样的吗?
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
试试这个查询,它可能对你有帮助。
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
嗯,你不能使用在 select 子句中定义的别名,但你可以使用在 from 子句中定义的别名:
Select
ID_Field AS ID1,
(Select Count(x)
From Table2
Where ID_Field = t1.ID_Field) As mycount
From Table1 t1
你也可以不使用别名,因为子查询是针对不同的 table:
Select
ID_Field AS ID1,
(Select Count(x)
From Table2
Where ID_Field = Table1.ID_Field) As mycount
From Table1
但是,我怀疑按照 esta 的回答中的建议使用左连接到派生 table 的查询会有更好的性能。