我知道如何在变量列表中检查表列的值,如下所示:
<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个匹配,其中值存在于列表中。但是,当我运行此查询时,它不起作用。
我认为很多人在此之前偶然发现了这个小问题,并且知道解决方案。任何帮助将不胜感激!
答案 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>