2013-04-12 83 views
1

我有ColdFusion中2查詢對象現在我想是考慮這些2的創建一個小的報表查詢ColdFusion的2查詢比較

查詢可能看起來像

Q1 

ID CODE NAME ACTIVE 

Q2 
CODE PRICE BOOKABLE 

代碼CODE 字段是這兩個查詢之間的公共密鑰。現在我想要得到的記錄是在Q1中,但不在Q2中,反之亦然,在兩個查詢中共有多少個重複記錄,其中CODE是唯一的。

+3

我總是會使用DB做這種工作,e.g @ swetha的答案。它將更具可擴展性,性能和可測試性。如果數據確實來自兩個不同的數據庫,則使用QoQ – barnyr

回答

2

你可以使用QoQ來解決這個問題。

 <cfquery name="Q1" datasource="test"> 
      select * from table1 
     </cfquery> 

     <cfquery name="Q2" datasource="test"> 
      select * from table2 
     </cfquery> 

     <cfset q1code = valuelist(q2.code,",")> 
     <cfset q2code = valuelist(q1.code,",")> 

     <cfquery name="q3" dbtype="query" > 
      select * from q1 where code Not in(#q1code#) 
     </cfquery> 

     <cfquery name="q4" dbtype="query" > 
      select * from q2 where code Not in(#q2code#) 
     </cfquery> 

     <cfquery name="q5" dbtype="query" > 
      select * from q1,q2 where q1.code = q2.code 
     </cfquery> 
4
<cfquery name="Q1" datasource="test"> 
     select * from users where code not in (select code from system) 
</cfquery> 
<cfquery name="Q2" datasource="test"> 
      select * from system where code not in (select code from users) 
    </cfquery> 
0

同意與其他人,使DB做的工作。如果這些都在同一個數據庫,那麼你這樣做是爲了獲得共同記錄到兩個表:

SELECT Q1.ID 
    ,Q1.CODE 
    ,Q1.NAME 
    ,Q1.ACTIVE 
    ,Q2.PRICE 
    ,Q2.BOOKABLE 
FROM Q1, Q2 
WHERE Q1.CODE = Q2.CODE 

爲了做你的問題的第一部分..讓那些在Q1中的記錄,但不Q2,如果我正確理解你,你可以用outer_join做到這一點。所有數據庫的外部連接語法都不相同。我總是必須去查閱它,所以我不打算寫在這裏。

另一個選擇是聯合兩個表,並讓冷聚變拉列名=「」

select * from Q1 UNION SELECT * FROM Q2 

- 你不能真正做到這一點(SELECT *),因爲重複的「報告代碼'在兩個dbs列。 您必須明確指定列,並將第一個重命名爲Q1Code,然後是Q2Code。

然後在CF你做

<cfif q2Code EQ ''> print Q1: #Q1CODE# <cfelse> print Q2: #Q2CODE# </cfif> 

或者也許你想:

<cfif q1code EQ Q2code> yay they match</cfif>