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>