1

我在 Coldfusion 中有 2 个 Query 对象现在我想根据这 2 个查询创建一个小报告

查询可能看起来像

Q1

ID CODE NAME ACTIVE

Q2
CODE PRICE BOOKABLE

代码CODE 字段是这两个查询之间的公共键。现在我想获取在 Q1 但不在 Q2 中的记录,反之亦然,在两个CODE唯一的查询中有多少重新编码是常见的。

4

3 回答 3

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>
于 2013-04-12T10:40:39.197 回答
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>
于 2013-04-12T10:37:51.790 回答
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  

- 由于两个数据库中重复的“代码”列,您实际上不能这样做(选择 *)。您必须明确指定列并将第一个重命名为 Q1Code,然后是 Q2Code。

然后在 CF 你做

<cfif q2Code EQ ''> print Q1: #Q1CODE# <cfelse> print Q2: #Q2CODE#  </cfif>

或者你可能想要:

<cfif q1code EQ Q2code> yay they match</cfif>
于 2013-04-22T21:59:55.860 回答