【问题标题】:Using multiple OR LIKE statements使用多个 OR LIKE 语句
【发布时间】:2019-10-12 20:28:31
【问题描述】:

我有一个数据库,我想过滤一些条目。这是过滤器的样子:

SELECT * FROM Item WHERE 1=1  AND Favorite = 1 AND (  DocType = ?  OR  DocType = ?  OR  DocType = ?  OR  DocType = ? )  AND (Title Like ? OR Location LIKE ? OR DocType LIKE ? OR ProType LIKE ?)

过滤器几乎可以工作。我想把重点放在最后一部分:

AND (Title Like ? OR Location LIKE ? OR DocType LIKE ? OR ProType LIKE ?)

因为看起来像

 OR DocType LIKE ? OR ProType LIKE ?

被忽略。以 DocType 切换 Location 为例:

AND (Title Like ? OR DocType LIKE ? OR Location LIKE ? OR ProType LIKE ?)

我可以找到与 DocType 相关的任何内容。无法再找到位置(就像 ProType 一样)。所以我想我写错了。

我需要如何将其写下来,以便过滤 Title、Location、DocType 和 ProType?

【问题讨论】:

  • 请添加示例输入和输出数据以使您的问题更加具体。
  • 例如:在搜索栏中输入“测试”。 “Test”是“DocType”的值。输出为空,但它应该是具有“Test”的“DocType”值的文件。但是当我输入“位置”的值“TestLocation”时,我可以看到具有“位置”值“TestLocation”的文件。现在,当用“DocType”切换“Location”时,我可以搜索并找到“Test”,但我再也找不到“TestLocation”了。
  • “AND (Title Like ? OR Location LIKE ? OR DocType LIKE ? OR ProType LIKE ?)” 应该真的有效吗?
  • 您是否提供任何 LIKE 通配符?
  • 这很奇怪AND ( DocType = ? OR DocType = ? OR DocType = ? OR DocType = ? ) 这是问题中的错字还是对实际查询的同一列部分的重复检查?

标签: sql filter


【解决方案1】:

您对DocType 列进行了两项检查,一项使用 =,另一项使用 LIKE,由于您已将 % 添加到搜索字符串中,因此 = 很可能返回 false,因此不会返回任何内容,因为这两项检查与一个 AND 所以你的 WHERE 条件将变为(缩短)

WHERE DocType = '%ABC%' AND DocType LIKE '%ABC'

我认为您应该直接删除查询中 AND 之前的部分

WHERE 1=1 AND Favorite = 1 AND (Title Like ? OR Location LIKE ? OR DocType LIKE ? OR ProType LIKE ?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2014-02-06
    • 1970-01-01
    • 2020-07-23
    • 2021-11-04
    相关资源
    最近更新 更多