SQL IN 语句 - 值(数据库字段)

2024-02-04

我正在构建的搜索查询的一部分需要通过 SQL 查询处理过滤器值,以检查数据库字段中的 CSV 列表。 (我无法控制数据库字段中 CSV 列表的使用/不使用,使用我拥有的内容)并且我做了一些测试,发现您可以执行以下操作:

Where database_field In (#CSV_list#)

If database_field等于2 and CSV_list等于1,2,3,4这会返回true因为在 CSV 列表中找到了值 2。

但是,我遇到的问题是我需要根据字段检查值列表,而不是根据列表检查字段。我会告诉你我是如何做到这一点的。

<cfset URL.filter_sizes = [2,4,7,10]>

<cfif IsDefined("URL.filter_sizes")>
    <cfset filterList = mid(URL.filter_sizes, 2, len(URL.filter_sizes) - 2)>

    And (
        <cfloop list="#filterList#" index="filter_item">
            <cfqueryparam cfsqltype="cf_sql_varchar" value="#filter_item#"> In 
            (item_sizes)
            <cfif listLast(filterList, ",") neq filter_item> 
             Or</cfif>
        </cfloop>
    )
</cfif>

现在,你们中的一些人可能会想“天哪,这是一种非常低效的做事方式。我知道,但我通过反复试验发现的一件事是,一旦我让一种方法发挥作用,我总是找到一种优化它的方法.对于我以前从未尝试过的事情,第一次就追求完美是没有意义的。无论如何,偏离切线,正如你所看到的,它循环了我的filterList变量并检查每个值item_sizes字段以查看该值是否在该 CSV 列表中。

这就是问题所在。如果item_sizes等于2,很好,因为其中一个值是2它会匹配 true。然而如果item_sizes等于2,3,4,即使我的两个变量值是2 and 4,它不匹配STRING of 2,3,4(我发现通过反复试验发生的事情)。我的猜测是,即使我将值放在左侧并将字段放在右侧,它仍然以如下方式运行该行item_sizes In (#filter_item#),这是我能想到的唯一合乎逻辑的答案。

有谁知道我如何通过使用上面使用的方法来解决这个问题(无需规范化数据库,因为目前这是不可能的)?

SOLUTION

正如评论中引用的那样,我找到了解决此问题的临时解决方案。它不是最好的,但它确实有效。

通过使用以下语法,您可以获得所需的结果:

<cfset URL.filter_sizes = [2,4,7,10]>

<cfif IsDefined("URL.filter_sizes")>
    <cfset filterList = mid(URL.filter_sizes, 2, len(URL.filter_sizes) - 2)>

    And (
        <cfloop list="#filterList#" index="filter_item">
            ',' + item_sizes + ',' Like
            <cfqueryparam cfsqltype="cf_sql_varchar" value="%,#filter_item#,%">
            <cfif listLast(filterList, ",") neq filter_item> Or</cfif>
        </cfloop>
    )
</cfif>

请注意

指某东西的用途<cfset URL.filter_sizes = [2,4,7,10]>是模拟实际的 URL 变量(编辑后)。这不是我使用过的错误struct在 URL 变量中。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL IN 语句 - 值(数据库字段) 的相关文章

  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu
  • SQL Android 错误:没有这样的表

    因此 每次我在位于 AddContacts 类中的 EditText 字段中输入数据时 我的对话框都会显示我已成功添加信息 但在日志 cat 中却显示没有这样的表 contactsTable 我认为错误出在我的数据库类中的 onCreate
  • Google BigQuery,使用“unnest”函数时丢失了空行

    StandardSQL WITH tableA AS SELECT T001 T002 T003 AS T id 1 5 AS L id UNION ALL SELECT T008 T009 AS T id NULL AS L id SEL
  • 如何将一行分成多行?

    我有一个 CSV 文件 看起来像这样 Column1 Column2 Column3 John Smith AA AH CA NI PB Reginald Higginsworth AA AH CA NI PB SN ZS 您会注意到其中有
  • <表值函数> 不是可识别的内置函数名称

    我收到此错误 消息 195 第 15 级 状态 10 第 1 行 fnParseName 不是可识别的内置函数名称 对于这个查询 SELECT fnParseName DOCTORFIRSTNAME DOCTORLASTNAME FROM
  • 如何创建包含多列MD5的GENERATED列?

    我尝试在 PostgreSQL 14 3 中添加下表 CREATE TABLE client cache id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY request VARCHAR
  • 如何让 Spring 控制器从 POJO 返回 CSV? [复制]

    这个问题在这里已经有答案了 给定一个简单的 Java 对象 public class Pojo private String x private String y private String z getters setters 是否有一些
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf
  • SQL Server 中全文搜索的奇怪行为

    我的 MyTable 带有列消息 NVARCHAR MAX ID 为 1 的记录包含消息 0123456789333444 Test 当我运行以下查询时 DECLARE Keyword NVARCHAR 100 SET Keyword 01
  • 不能简单地使用 PostgreSQL 表名(“关系不存在”)

    我正在尝试运行以下 PHP 脚本来执行简单的数据库查询 db host localhost db name showfinder username user password password dbconn pg connect host
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • 在内连接中重用 mysql 子查询

    我正在尝试优化查询 试图避免重复用 指示的查询 复杂查询 使用两次 结果相同 原始查询 SELECT news FROM news INNER JOIN SELECT myposter FROM SELECT COMPLEX QUERY U
  • 如何获得组中“中间”值的平均值?

    我有一个包含值和组 ID 的表 简化示例 我需要获取中间 3 个值的每组的平均值 因此 如果有 1 2 或 3 个值 则它只是平均值 但如果有 4 个值 它将排除最高值 5 个值将排除最高值和最低值 等等 我正在考虑某种窗口函数 但我不确定
  • 如何在 Python 2.7 中编写 unicode csv

    我想将数据写入文件 其中 CSV 中的行应如下所示 直接来自 Python 控制台 row xef xbb xbft 11651497 http kozbeszerzes ceu hu entity t 11651497 xml Szabo
  • 在 SQL 中如何获得整数的最大值?

    我试图从 MySQL 数据库中找出整数 有符号或无符号 的最大值 有没有办法从数据库本身提取这些信息 是否有我可以使用的内置常量或函数 标准 SQL 或 MySQL 特定的 At http dev mysql com doc refman
  • SQL Server - SQL 替换整个数据库中所有表中的所有列

    这是一个很遥远的事情 我猜这个问题没有简单的答案 但是 我继承了一个数据库 其中填充了一些可怕的数据 许多包含描述的行都有回车符 这意味着当我们 BCP 输出数据时 它会带有回车符 我的问题 有没有办法在 MS SQL Server 中对整
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • 如何重置 SQL Server 中表的 IDENTITY 列? [复制]

    这个问题在这里已经有答案了 我怎样才能重置我的IDENTITY我已经填充的表中的列 我尝试过类似的方法 但它不起作用 WITH TBL AS SELECT ROW NUMBER OVER ORDER BY profile id AS RN
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI

随机推荐