我可以在两个不同的查询结果上使用Coldfusion Query查询吗?

时间:2016-07-05 18:02:19

标签: coldfusion sql-server-2012 qoq coldfusion-2016

我正在尝试使用基于两个单独查询的查询查询,但我没有得到我想要的结果。我认为自己是SQL和Coldfusion的初学者。我正在使用Coldfusion 2016和SQL Server 2012。

初始请求:给我所有申请人的姓名,其费用已被免除并安排试镜。

dsn1.table1 - 申请人表

dsn1.table2 - 试听表

<cfquery name="getApplicants" datasource="dsn1">
    SELECT dbo.table1.STU_ID, dbo.table1.NAME, dbo.table1.FEE_STATUS
    FROM dbo.table1, dbo.table2
    WHERE (dbo.table1.STU_ID = dbo.table2.STU_ID) AND FEE_STATUS = 'WAIVED'
</cfquery>

这个工作!

跟进请求:有些申请人不知道他们的费用被免除,所以他们仍然经历了付款流程。给我所有免除费用并安排试镜并且没有付款的申请人。

dsn2.table3 - 包含付款信息。申请人(STU_ID)有多个条目为其申请流程添加时间戳。样品:

John Doe
123456789 - TENTATIVE - timestamp1
123456789 - PAID - timestamp2
123456789 - EMAILED - timestamp3
123456789 - FINALIZED - timestamp4

Jane Doe
234567895 - TENTATIVE - timestamp1
234567895 - TENTATIVE - timestamp2
234567895 - TENTATIVE - timestamp3
234567895 - CUSTOMER CANCELLED BEFORE PROCESSING PAYMENT - timestamp4

John Smith
345678951 - TENTATIVE - timestamp1
345678951 - TENTATIVE - timestamp2
345678951 - TENTATIVE - timestamp3
345678951 - TENTATIVE - timestamp4
345678951 - PAID - timestamp5
345678951 - FINALIZED - timestamp6
345678951 - EMAILED - timestamp7

我的方法是先让非收款人:

<cfquery name="getNonPayees" datasource="dsn2">
    SELECT  dbo.table3.STU_ID, dbo.table3.PAYMENT_STATUS
    FROM dbo.table3
    WHERE dbo.table3.PAYMENT_STATUS <> 'PAID'
</cfquery>

这个工作!

之后,我将使用查询查询来匹配 getApplicants getNonPayees 的结果:

<cfquery dbtype="query" name="QofQ">
    SELECT getApplicants.NAME
    FROM getApplicants, getPaymentStatus 
    WHERE getApplicants.STU_ID = getPaymentStatus.STU_ID
</cfquery>
  

错误:表[getApplicants]中找不到选择列引用[getApplicants.NAME]。

<cfquery dbtype="query" name="QofQ">
    SELECT DISTINCT getApplicants.NAME
    FROM getApplicants, getPaymentStatus 
    WHERE getApplicants.STU_ID = getPaymentStatus.STU_ID
</cfquery>
  

错误:表[getApplicants]中找不到选择列引用[getApplicants.NAME]。

<cfquery dbtype="query" name="QofQ">
    SELECT *
    FROM getApplicants, getPaymentStatus 
    WHERE getApplicants.STU_ID = getPaymentStatus.STU_ID
</cfquery>

<cfquery dbtype="query" name="QofQ">
    SELECT NAME
    FROM getApplicants, getPaymentStatus 
    WHERE getApplicants.STU_ID = getPaymentStatus.STU_ID
</cfquery>

没有错误,但我获得了QofQ的零记录。请指教。谢谢!

1 个答案:

答案 0 :(得分:0)

如果您不能通过数据库加入这两个数据集,这就是我接近它的方法,您可以将两个查询组合在一起(在匹配列之后 - 即确保结果中的ID,名称和状态匹配)。您可以使用ColdFusion循环第二个查询,将该查询的所有行添加到第一个查询。然后,您将拥有一个包含所有数据的查询(第一个)。

因此...

query1 - ID,Name,Status(具有必需的where子句)

query2 - ID,Name,Status(带必要的where子句)

然后循环遍历query2,将结果添加到query1。 QueryAddRow,我相信......

这不会很快,实际上它会很慢。

一旦完成,你可以Q的Q。

话虽如此......试着尽可能多地在数据库中做,正如其他人所说的那样。