2016-07-05 1 views
0

2つの別々のクエリに基づいてクエリのクエリを使用しようとしていますが、私が望む結果が得られません。私はSQLとColdfusionの両方で初心者だと考えています。私はColdfusion 2016とSQL Server 2012を使用しています。2つの異なるクエリ結果に対してColdFusionクエリのクエリを使用できますか?

最初のリクエスト:料金が免除され、オーディションを予定しているすべての応募者の名前を教えてください。

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)のエントリは複数あります。サンプル:

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

この作品:

 
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 

私のアプローチは、最初の非振込先を取得することでした!その後

、私はgetApplicantsgetNonPayeesからの結果と一致するように、クエリのクエリを使用するつもりだった。

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

ERROR: The select column reference [getApplicants.NAME] is not found in table [getApplicants].

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

ERROR: The select column reference [getApplicants.NAME] is not found in table [getApplicants].

<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

疑わしいときは、自分のデータを見てください。この場合、getApplicantsの列リストを開始するのがよいでしょう。 –

+0

すみません。その最後のコードとエラーを削除する必要があります。私は、実際の変数の代わりにNAMEをテストしたので、generic(例えばtable1、table2など)として "NAME"を試してみました。私が終わったのはエラーではなく、レコード数がゼロだった。 – airpolgas

+0

QのQを使用せず、単にデータベースクエリに別のフィルタを追加すると考えましたか? –

答えて

0

あなたは、私はそれにアプローチする方法をあるデータベースを経由して2つのデータセットに参加できない場合は、列をマッチングした後、(2つのクエリを組み合わせることができ - すなわち結果に必ずID、名前&ステータスマッチを作ります)。 ColdFusionを使用して2番目のクエリをループし、そのクエリのすべての行を最初のクエリに追加することができます。次に、すべてのデータを含む1つのクエリ(最初のクエリ)を取得します。

そう...

Query1を - ID、名前、ステータス(必須で節)

QUERY2 - ID、名前、ステータス(必須で節)

はその後ループquery2を使用して結果をquery1に追加します。 QueryAddRow、私は信じています...

これはあまり速くはありませんが、実際はSLOWになります。

それが完了したら、あなたはQ.

のQすることができます...他の人が言っているように、データベースでできるだけ多くのことをしようとしていること。

関連する問題