1
 <cfquery name="checkinvoice" datasource="?">
    SELECT DISTINCT INVOICE_DATE,DEPARTMENT,VALUE,INVOICE_NO 
    FROM   ro_invoice 
    WHERE  sheet_no='#newROSheet.sheetNo#'
    MINUS
    SELECT DISTINCT INVOICE_DATE,DEPARTMENT,VALUE,INVOICE_NO 
    FROM   dbowner.rs_invoices 
    WHERE  rs_id ='#recordSheet.id#'
</cfquery>

在上面的代码中,第一条select语句属于,datasource1第二条语句属于datasource2(在 oracle 中)。如何使用 cfquery 执行这两个语句?

4

3 回答 3

4

如果两个数据库都是 Oracle(您的问题不清楚),您可以创建一个数据库链接并查询两个数据库,就好像它们是一个数据库一样。此链接在 oracle 中完成,因此不需要“ColdFusion 解决方案”。Oracle 在此处提供有关链接数据库的文档。访问和修改多个数据库中的信息 在从旧系统迁移到新系统的数据迁移过程中,我们已经多次使用过这种方法。它运作良好。您还可以使用insertupdatedelete

使用 @dblink 语法链接表后,使用它很容易。

<cfquery ...>
    select
        a.column1
      , b.column2
    from
      someTable@dblinkName a -- I came from the linked database
      inner join someOtherTable b on b.someColumn = a.someColumn
</cfquery>
于 2013-04-05T11:18:03.440 回答
2

有几种方法可以做到这一点。一种是查询查询。但是,根据您的问题,尚不清楚联合查询是否是您想要的。你可能想要这样的东西:

查询 1

select yourfields
, concat(your fields together, casting as string where necessary) concatfield
etc

查询 2 与查询 1 相同,但来自另一个数据库。查询 3 是

select yourfields
from Query1
where concatfield not in (<cfqueryparam 
    value="#ValueList(Query2.concatfield#" list="yes">

另一种方法是正如亨利建议的那样。有一些方法可以编写来自数据库 1 的查询,其中包括来自数据库 2 的表。事实上,它们甚至不必是相同类型的数据库。例如,您可以在 Sql Server 上设置链接服务器并查询 oracle 数据库。但是,语法取决于 RDBMS,您没有指定您的。

于 2013-04-05T09:33:45.103 回答
0

简短的回答是你不能。但是,您可以执行两个单独的 CFQUERY,然后将第三个 CFQUERY 中的结果连接为使用 UNION 操作的查询查询(只要两个原始 CFQUERY 中的列是等效的)。但是,根据您显示的查询,您希望从第一个数据源的结果中删除第二个数据源的结果。这不能在 CFQUERY 语句中完成。

于 2013-04-05T06:08:31.543 回答