Coldfusion 如何在CFQUERY中使用两个数据源

Coldfusion 如何在CFQUERY中使用两个数据源,coldfusion,Coldfusion,在上面的代码中,第一条select语句属于oracle中的datasource1,第二条属于datasource2。如何使用cfquery执行这两条语句?简而言之,您不能。但是,您可以执行两个单独的CFQUERY,然后使用UNION操作将第三个CFQUERY中的结果作为查询的查询连接起来,只要两个原始CFQUERY中的列相等。但是,根据显示的查询,您希望从第一个数据源的结果中删除第二个数据源的结果。这不能在CFQUERY语句中完成。简而言之,您不能。但是,您可以执行两个单独的CFQUERY,然后

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

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

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

有几种方法可以完成。一个是查询的查询。然而,根据您的问题,不清楚联合查询是否是您想要的。您可能需要以下内容:

问题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>
查询2与查询1相同,但来自另一个数据库。问题3是

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

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

有几种方法可以做到这一点。一个是查询的查询。然而,根据您的问题,不清楚联合查询是否是您想要的。您可能需要以下内容:

问题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>
查询2与查询1相同,但来自另一个数据库。问题3是

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

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

如果两个数据库都是Oracle,您的问题中不清楚,您可以创建一个数据库链接并查询两个数据库,就像它们是一个数据库一样。此链接在oracle中完成,因此不需要ColdFusion解决方案。Oracle在此处提供了有关链接数据库的文档。在将数据从旧系统迁移到新系统的过程中,我们已经多次使用过这种方法。它工作得很好。还可以使用“插入”、“更新”和“删除”

一旦使用@dblink语法链接了表,就很容易了

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

如果两个数据库都是Oracle,您的问题中不清楚,您可以创建一个数据库链接并查询两个数据库,就像它们是一个数据库一样。此链接在oracle中完成,因此不需要ColdFusion解决方案。Oracle在此处提供了有关链接数据库的文档。在将数据从旧系统迁移到新系统的过程中,我们已经多次使用过这种方法。它工作得很好。还可以使用“插入”、“更新”和“删除”

一旦使用@dblink语法链接了表,就很容易了

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

您可以在同一数据库登录下访问数据库吗?如果可以这样做,则可以通过使用单个数据源来消除此问题。请更新问题标记以指示您的数据库类型和版本。您可以在同一数据库登录下访问数据库吗?如果您可以这样做,那么您可以通过使用单个数据源来消除此问题。请更新问题标签以指示您的数据库类型和版本。但是您可以使用db链接查看Travis的答案。但是您可以使用db链接查看Travis的答案。您还可以链接数据库,甚至不同的服务器,在SQL server中,然后在查询中使用“完全限定”表名。您还可以在SQL server中链接数据库,甚至不同的服务器,然后在查询中使用“完全限定”表名。