我试图找出一些组,这些组会接受任何像我正在寻找的词,并最终将它们组合在一起,但是当我在where语句中使用like时,我获得的结果比我使用它时的方式更多而我只是想知道为什么?
如果我使用这是where语句我会得到更多的结果,因为它提取了像我列出的单词,包括在之前/之后有空白的单词
and name like '%offer1%'
or name like '%offer2%'
or name like '%offer3%'
or name like '%offer4%' -- 244
然而,当我单独搜索每个单词时,我得到的值越来越少,因为它没有得到可能有空白区域的单词,我只是想知道为什么呢?对于下面的代码,我只是单独运行这些代码,而不是像节目一样运行,因为我每次都将它们注释掉,以获得行末的计数
and name like '%offer1%' -- 97
and name like '%offer2%' -- 38
and name like '%offer3%' -- 2
and name like '%offer4%' -- 6 (143)
答案 0 :(得分:1)
这是AND / OR逻辑的问题。从这里了解更多相关信息:http://www.w3schools.com/sql/sql_and_or.asp
如果您使用“和”条件,则所有条件必须为true才能在结果中显示记录(因此,您的代码会为您提供结果,其中名称与offer1一样,并且同时与offer2同时提供3和同时提供4)。
如果您使用“或”条件,则任何条件都必须为true(因此它会为您提供结果,其中name类似于offer2,或者名称类似于offer3等。)
如果要组合AND / OR逻辑,则首先运行AND,然后运行OR(就像数学中的操作顺序一样,首先是乘法/除法,然后是加法/减法)。
WHERE (A and B) OR (C) OR (D)
答案 1 :(得分:1)
问题是您的WHERE
声明,此处未显示。
where <condition>
and name like '%offer1%'
or name like '%offer2%'
or name like '%offer3%'
or name like '%offer4%'
这被解释为:
where (<condition> and name like '%offer1%')
or (name like '%offer2%')
or (name like '%offer3%')
or (name like '%offer4%')
这与您最初想要实现的目标不同。
您应该使用括号更改查询:
and (name like '%offer1%'
or name like '%offer2%'
or name like '%offer3%'
or name like '%offer4%')