我有一个数据库,我想过滤一些条目。过滤器的外观如下:
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?
答案 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'