ColdFusion:SQL Select 来自查询

ColdFusion: SQL Select IN from a Query

我有一个 SQL 服务器查询,其中 returns 一个 MyBusinessUnit 列的两个值 returns 两个值,比如:

1111

2222

在名为 MyQuery1

的查询对象中

这两个值也存在于 DB2 数据库的 MyCorpUnit 列中。

我想要的是 select 来自 DB2 table 的所有匹配记录——而且,不,跨数据库查询不起作用。

所以,这是我的 Query2 DB2 数据库:

 <cfquery name="Query2" datasource="#application.DSN#"> 
  SELECT MyCorpUnit WHERE MyCorpUnit IN
  (    
     <cfqueryparam value="   #Query1.MyBusinessUnit #" CFSQLType="cf_sql_varchar" />
  )
 </cfquery>

但是 Query2 只返回一个值 (1111) 的匹配记录。

所以需要一些其他的方法。我试图创建一个字符串,但也没有用。

有什么想法吗?

谢谢!

cfqueryparam 有一个 list 属性可能有帮助:

<cfqueryparam value = "parameter value" 
        CFSQLType = "parameter type" 
        list = "yes|no" 
        maxLength = "maximum parameter length" 
        null = "yes|no" 
        scale = "number of decimal places" 
        separator = "separator character"> 
    AND/OR ...additional criteria of the WHERE clause...> 

我以前用过,但不确定它是否在 QoQ 中。 :D

参考:http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f6f.html

我将接受@AJ Dyka 的回答[谢谢!]但我还有更多内容要补充以使其完整。事实上,根据他的建议,我最终使用了 'LIST' 属性。关于它的一个很好的讨论can be found here

但是,正如您在评论中看到的那样,尽管使用了列表,我仍然只得到“1111”。那是因为我的数据中有前导空格。我最终使用了 TRIM 函数。这是一个代码片段。

已将 Query1 的输出转换为列表:

<cfset ListUniqueWStreamBusinessUnit = ValueList(Query1.MyBusinessUnit )>

然后是神奇的代码片段!

    ...
    WHERE trim(GMMCU) IN 
    (   
       <cfqueryparam value="#ListUniqueWStreamBusinessUnit#" 
           CFSQLType="cf_sql_varchar"   
           list="yes" />
    )