ColdFusion:SQL从查询中选择IN

时间:2017-02-15 01:17:02

标签: sql list coldfusion cfquery

我有一个SQL Server查询,它返回一个MyBusinessUnit列的两个值,返回两个值,例如:

1111

2222

在名为MyQuery1

的查询对象中

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

我想要的是从DB2表中选择所有匹配的记录 - 而且,不,跨数据库查询不起作用。

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

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

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

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

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我将接受@AJ Dyka的回答[谢谢!]但我还有更多要补充的内容。事实上,根据他的建议,我最终使用了“LIST&#39;属性。对它进行了很好的讨论can be found here

但是,正如你在评论中看到的那样,我仍然只得到&#34; 1111&#34;尽管使用了List。这是因为我的数据中有前导空格。我最终使用了TRIM功能。这是一段代码片段。

将Query1的输出转换为List:

<cfset ListUniqueWStreamBusinessUnit = ValueList(Query1.MyBusinessUnit )>

然后是神奇的代码段!

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