我有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