2013-04-12 44 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>