让我们将下表视为一个例子
表 - 科目
ID | subject
------ | ---------------
1 | maths, science
2 | maths, science, english
3 | english, computer
查询
SELECT * FROM subjects WHERE subject LIKE '%maths%' AND subject LIKE '%science%'
当我在上面运行查询时,输出结果如下
ID | subject
------ | ---------------
1 | maths, science
2 | maths, science, english
我的问题:
是否可以修改上面的查询以获得与搜索完全匹配的以下结果到两个参数,即使搜索的顺序发生了变化 即
SELECT * FROM subjects WHERE subject LIKE '%science%' AND subject LIKE '%maths%'
期望的结果:
ID | subject
------ | ---------------
1 | maths, science
答案 0 :(得分:1)
这个数据库设计不好,使用关联表而不是逗号分隔列表。
您可以使用LEN检查subject
中除指定值之外是否还有其他内容。
SELECT * FROM subjects WHERE subject LIKE '%science%' AND subject LIKE '%maths%'
AND LEN(subject) <= LEN('maths, science')
答案 1 :(得分:1)
只需使用CHARINDEX()
即可获得相同的结果,因为它会检查是否存在,您可以使用它强制执行订单。
SELECT *
FROM subjects
WHERE CHARINDEX('maths', subject, 0) < CHARINDEX('science', subject, 0) -- enforces order
AND CHARINDEX('maths', subject, 0) > 0 -- to make sure that your "first word" exists