Coldfusion 如何使用CFQUERY从表2中为表1中的每个项目获得一个结果?
我正试图做一个简单的查询:Coldfusion 如何使用CFQUERY从表2中为表1中的每个项目获得一个结果?,coldfusion,cfquery,Coldfusion,Cfquery,我正试图做一个简单的查询: <CFQUERY Name=GetResults Database=Rent> SELECT * FROM Units, Tenants WHERE Units.UnitID=Tenants.UnitID</CFQUERY> <CFOUTPUT Query=GetRetults> #UnitName# #TenantID#<BR> </CFOUTPUT> 我只希望租户的每个单元有一个结果,我希望
<CFQUERY Name=GetResults Database=Rent> SELECT * FROM Units, Tenants
WHERE Units.UnitID=Tenants.UnitID</CFQUERY>
<CFOUTPUT Query=GetRetults>
#UnitName# #TenantID#<BR>
</CFOUTPUT>
我只希望租户的每个单元有一个结果,我希望它是最高的租户ID。换句话说,我希望结果如下所示:
101 590
102 97
103 44
我不知所措。我尝试在查询中创建一个循环,但没有成功。我知道这一定很简单,但我想不出来。如果有任何建议,我将不胜感激将您的查询结果分组到数据库中,并使用聚合函数。像这样的方法应该会奏效:
<CFQUERY Name="GetResults" Database="Rent">
SELECT u.unitID, u.unitName, max( t.tenantID ) as maxTenantID
FROM Units u
INNER JOIN Tenants t ON u.UnitID = t.UnitID
GROUP BY u.unitID, u.unitName
</CFQUERY>
如果更改SQL不是一个选项,那么一旦数据库将完整结果集返回给ColdFusion,就可以使用查询查询来执行相同的操作。注意,下面的SQL在内存中运行,而不是在数据库中运行
<CFQUERY Name="groupedResults" dbtype="query">
SELECT unitID, unitName, max( tenantID ) as maxTenantID
FROM GetResults
GROUP BY unitID, unitName
</CFQUERY>
最后,cfoutput标记还有一个group属性,您可以使用它。内部cfoutput为每个租户运行一次。我认为这是最丑的方法
<CFOUTPUT Query="GetRetults" group="unitID">
#UnitName#
<!--- Reset every time --->
<cfset maxTenantID = 0>
<cfoutput>
<cfset maxTenantID = max( maxTenantID, TenantID )>
</cfoutput>
#maxTenantID#<BR>
</CFOUTPUT>
注意:对于第三个选项,您需要将查询修改为在unitID列上排序,以确保结果正确。我知道您显示了选项,但是Brad说,像Brad一样,执行此代码端确实是最糟糕的方法。这绝对是查询编译的任务。
<CFOUTPUT Query="GetRetults" group="unitID">
#UnitName#
<!--- Reset every time --->
<cfset maxTenantID = 0>
<cfoutput>
<cfset maxTenantID = max( maxTenantID, TenantID )>
</cfoutput>
#maxTenantID#<BR>
</CFOUTPUT>