SQL -表列内的变量



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

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

我想很多人以前都偶然发现过这个小问题,并且知道解决办法。任何帮助将不胜感激!

这个查询逻辑应该可以工作

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

在编译查询之前,它不知道变量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>

相关内容

  • 没有找到相关文章

最新更新