我正在尝试使用基于两个单独查询的查询查询,但我没有得到我想要的结果。我认为自己是 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>
这行得通!
之后,我将使用查询查询来匹配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 的记录为零。请指教。谢谢!