0

我正在尝试使用基于两个单独查询的查询查询,但我没有得到我想要的结果。我认为自己是 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) 有多个条目,它们为其申请过程加上时间戳。样本:

约翰·多伊
123456789 - 暂定 - 时间戳 1
123456789 - 付费 - 时间戳2
123456789 - 通过电子邮件发送 - 时间戳 3
123456789 - 完成 - 时间戳4

简·多伊
234567895 - 暂定 - 时间戳 1
234567895 - 暂定 - 时间戳 2
234567895 - 暂定 - 时间戳 3
234567895 - 客户在处理付款前取消 - 时间戳 4

约翰·史密斯
345678951 - 暂定 - 时间戳 1
345678951 - 暂定 - 时间戳 2
345678951 - 暂定 - 时间戳 3
345678951 - 暂定 - 时间戳 4
345678951 - 付费 - 时间戳 5
345678951 - 完成 - 时间戳6
345678951 - 电子邮件 - 时间戳 7

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

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

这行得通!

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

<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 的记录为零。请指教。谢谢!

4

1 回答 1

0

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

所以...

query1 - ID、名称、状态(带有必要的 where 子句)

query2 - ID、名称、状态(带有必要的 where 子句)

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

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

完成后,您可以Q of Q。

话虽这么说...尝试像其他人所说的那样在数据库上做尽可能多的事情。

于 2016-11-14T20:46:08.767 回答