我在Coldfusion中有2个Query对象现在我想根据这2个查询创建一个小报告
查询可能看起来像
Q1
ID CODE NAME ACTIVE
和
Q2
CODE PRICE BOOKABLE
代码CODE
字段是这两个查询之间的共同关键。现在我想得到的记录是Q1,但不是Q2,反之亦然,在CODE
唯一的查询中,有多少记录是常见的。
答案 0 :(得分: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>
答案 1 :(得分: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>
答案 2 :(得分:0)
与其他人同意,让数据库完成工作。如果它们在同一个数据库中,那么您这样做是为了获取两个表共有的记录:
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做到这一点。执行外连接时,所有数据库的语法都不同。我总是要去查一下,所以我不打算在这里写。
另一种选择是联合两个表,让冷融合在column_name =''
上提取报告select * from Q1 UNION SELECT * FROM Q2
- 由于两个dbs中都存在重复的“代码”列,因此您无法实际执行此操作(选择*)。 你必须明确指定列并将第一个重命名为Q1Code,然后重命名为Q2Code。
然后在CF中你做
<cfif q2Code EQ ''> print Q1: #Q1CODE# <cfelse> print Q2: #Q2CODE# </cfif>
或者你想要:
<cfif q1code EQ Q2code> yay they match</cfif>