0

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

<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 个匹配项。但是,当我运行此查询时,它不起作用。

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

4

2 回答 2

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
于 2014-03-21T12:05:25.673 回答
-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>
于 2014-03-21T11:34:18.530 回答