我正在尝试使用基于两个单独查询的查询查询,但我没有得到我想要的结果。我认为自己是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的零记录。请指教。谢谢!
答案 0 :(得分:0)
如果您不能通过数据库加入这两个数据集,这就是我接近它的方法,您可以将两个查询组合在一起(在匹配列之后 - 即确保结果中的ID,名称和状态匹配)。您可以使用ColdFusion循环第二个查询,将该查询的所有行添加到第一个查询。然后,您将拥有一个包含所有数据的查询(第一个)。
因此...
query1 - ID,Name,Status(具有必需的where子句)
query2 - ID,Name,Status(带必要的where子句)
然后循环遍历query2,将结果添加到query1。 QueryAddRow,我相信......
这不会很快,实际上它会很慢。
一旦完成,你可以Q的Q。
话虽如此......试着尽可能多地在数据库中做,正如其他人所说的那样。