使用多个OR LIKE语句

时间:2019-05-27 09:17:46

标签: sql filter

我有一个数据库,我想过滤一些条目。过滤器的外观如下:

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切换位置时:

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

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

我该如何写下来以便过滤标题,位置,DocType和ProType?

1 个答案:

答案 0 :(得分:0)

您在select distinct TABLE_NAME, COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME in( select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS group by COLUMN_NAME having count(*) > 1 ) order by TABLE_NAME, COLUMN_NAME 列中进行了两项检查,一项带有=,另一项带有LIKE,并且由于您已将%添加到搜索字符串中,因此=很有可能返回false,因此不会返回任何内容,因为这两项都是与AND组合在一起,因此您的WHERE条件将变为(缩短)

DocType

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

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