我有ColdFusion中2查詢對象現在我想是考慮這些2的創建一個小的報表查詢ColdFusion的2查詢比較
查詢可能看起來像
Q1
ID CODE NAME ACTIVE
和
Q2
CODE PRICE BOOKABLE
代碼CODE
字段是這兩個查詢之間的公共密鑰。現在我想要得到的記錄是在Q1中,但不在Q2中,反之亦然,在兩個查詢中共有多少個重複記錄,其中CODE
是唯一的。
我有ColdFusion中2查詢對象現在我想是考慮這些2的創建一個小的報表查詢ColdFusion的2查詢比較
查詢可能看起來像
Q1
ID CODE NAME ACTIVE
和
Q2
CODE PRICE BOOKABLE
代碼CODE
字段是這兩個查詢之間的公共密鑰。現在我想要得到的記錄是在Q1中,但不在Q2中,反之亦然,在兩個查詢中共有多少個重複記錄,其中CODE
是唯一的。
你可以使用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>
<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>
同意與其他人,使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>
我總是會使用DB做這種工作,e.g @ swetha的答案。它將更具可擴展性,性能和可測試性。如果數據確實來自兩個不同的數據庫,則使用QoQ – barnyr