从我的查询中获得正确结果时遇到问题。
我的主要问题是我有一个名为filterlist的列,其中包含此格式的数据[space]NUMBER[space]
| 2 | 16 | 7 |
我需要使用此Where语句选择与我的第一个查询匹配的所有产品 -
WHERE
(dept = '5') AND (active = 1) AND (Manufacturer = 'A Company')
然后我需要添加以下内容以查找列filterlist
包含任何字符串值[space]NUMBER[space]
使用 -
(CHARINDEX(' 2 ', filterlist) > 0) OR (CHARINDEX(' 3 ', filterlist) > 0)
OR (CHARINDEX(' 64 ', filterlist) > 0)
我尝试过的完整SQL是
SELECT *
FROM products
WHERE
((dept = '5') AND (active = 1) AND (Manufacturer = 'A Company'))
AND ((CHARINDEX(' 3 ', filterlist) > 0) OR
(CHARINDEX(' 34 ', filterlist) > 0) OR
(CHARINDEX(' 64 ', filterlist) > 0))
所以我希望得到所有记录,其中dept为5,处于活动状态,由'A Company'制作,并且列filterlist包含3,34或64(作为示例)
更新:这部分一切正常:
WHERE
((dept = '5') AND (active = 1) AND (Manufacturer = 'A Company'))
AND ((CHARINDEX(' 3 ', filterlist) > 0)
但在添加此部分时从错误的部门/制造商处提取其他记录
OR
(CHARINDEX(' 34 ', filterlist) > 0) OR
(CHARINDEX(' 64 ', filterlist) > 0))
如果有人能指出我如何做到这一点,我将非常感激。
答案 0 :(得分:1)
如果不可能,那么你可以使用这个
SELECT *
FROM products
WHERE ((dept = '5') AND (active = 1) AND (Manufacturer = 'A Company'))
AND ltrim(rtrim(filterlist)) in ('3','34','64')
答案 1 :(得分:0)
感谢您创建SQLFiddle。此查询返回具有“公司”的两行。所以我认为它是正确的(我删除了dept
,因为它不在products
中,但是在这个示例中没有区别,因为我们仍然有相同的逻辑组合,只少一个)。
SELECT *
FROM products
WHERE
((active = 1) AND (Manufacturer = 'A Company'))
AND ((CHARINDEX(' 3 ', filterlist) > 0) OR
(CHARINDEX(' 34 ', filterlist) > 0) OR
(CHARINDEX(' 64 ', filterlist) > 0))
此外,当我更改为Manufacturer = 'B Company'
时,我只获得了第三条记录。
这对我有意义......我错过了什么吗?