SQL IN - 表列内的变量?

时间:2014-03-21 10:05:22

标签: sql coldfusion coldfusion-10 cfquery sql-in

我知道如何在变量列表中检查表列的值,如下所示:

<cfquery datasource="test_sql" name="get">
    Select a
    From b
    Where c In  
    (
        <cfqueryparam cfsqltype="cf_sql_varchar" list="true" value="#d#">
    )
</cfquery>

但是如何撤销where子句?我尝试过这个没有用过的东西:

<cfquery datasource="test_sql" name="get">
    Select a
    From b
    Where <cfqueryparam cfsqltype="cf_sql_varchar" value="#c#"> In (d)
</cfquery>

然后查找列d中存储的具有值c的列表中的任何匹配。

例如

C = 12345

Column D - 4 Rows
12344,12345,12346 --- Match (List Item 2)
12323,12327,12375 --- No Match
12312,12341,12345 --- Match (List Item 3)
12128,12232,12345 --- Match (List Item 3)

记录计数应为3,因为总共有3个匹配,其中值存在于列表中。但是,当我运行此查询时,它不起作用。

我认为很多人在此之前偶然发现了这个小问题,并且知道解决方案。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

此查询逻辑应该可以正常工作

where d = <cfqueryparam cfsqltype="cf_sql_varchar" value="#c#"> 
--- c is only element
or d like <cfqueryparam cfsqltype="cf_sql_varchar" value="#c#,%"> 
--- c is first element
or d like <cfqueryparam cfsqltype="cf_sql_varchar" value="%,#c#,%"> 
--- c is in the middle somewere
or d like <cfqueryparam cfsqltype="cf_sql_varchar" value="%,#c#"> 
--- c is last element

答案 1 :(得分:-4)

在编译查询之前,它不知道变量c。如果从正在替换列名的变量中删除cfqueryparam标记,它将起作用。

<cfquery datasource="test_sql" name="get">
  Select a
  From b
  Where #c# In (<cfqueryparam cfsqltype="cf_sql_varchar" list="true" value="#d#">)
</cfquery>