我在 Coldfusion 中有 2 个 Query 对象现在我想根据这 2 个查询创建一个小报告
查询可能看起来像
Q1
ID CODE NAME ACTIVE
和
Q2
CODE PRICE BOOKABLE
代码CODE
字段是这两个查询之间的公共键。现在我想获取在 Q1 但不在 Q2 中的记录,反之亦然,在两个CODE
唯一的查询中有多少重新编码是常见的。
我在 Coldfusion 中有 2 个 Query 对象现在我想根据这 2 个查询创建一个小报告
查询可能看起来像
Q1
ID CODE NAME ACTIVE
和
Q2
CODE PRICE BOOKABLE
代码CODE
字段是这两个查询之间的公共键。现在我想获取在 Q1 但不在 Q2 中的记录,反之亦然,在两个CODE
唯一的查询中有多少重新编码是常见的。
<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>
你可以使用 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>
同意其他人,让数据库完成工作。如果这些在同一个数据库中,那么您这样做是为了获取两个表共有的记录:
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
- 由于两个数据库中重复的“代码”列,您实际上不能这样做(选择 *)。您必须明确指定列并将第一个重命名为 Q1Code,然后是 Q2Code。
然后在 CF 你做
<cfif q2Code EQ ''> print Q1: #Q1CODE# <cfelse> print Q2: #Q2CODE# </cfif>
或者你可能想要:
<cfif q1code EQ Q2code> yay they match</cfif>