SQL包含或喜欢

时间:2019-06-19 11:39:07

标签: mysql sql

我正在寻找在查找“单词1”或“单词2”的列上运行查询,并且如果其中一个存在,则结果需要包含“单词3”

该列本身可能非常庞大,其中包含大量文本,这是我到目前为止的内容,它不返回我正在寻找的内容:

SELECT * 
FROM Table1 
WHERE column LIKE "%word.1%" OR 
      column LIKE "%word.2%" AND 
      column LIKE "%word3%";

预先感谢

2 个答案:

答案 0 :(得分:3)

您应该使用()一起管理两个OR前提

SELECT * 
FROM Table1 
WHERE ( column LIKE "%word.1%" OR column LIKE "%word.2%" ) 
  AND column LIKE "%word3%" ;

答案 1 :(得分:1)

  

该列本身可能很大,其中包含大量文本

在那种情况下,我会建议FULL TEXT indexes,因为LIKE '%search%'不会扩展,因为它永远无法使用索引进行优化。

并使用MATCH() ... AGAINST来匹配

SELECT 
 ...
WHERE
MATCH (column )
    AGAINST ('word.1 word.2 +word3' IN BOOLEAN MODE);
  

MySQL使用有时称为隐式布尔逻辑的内容,在   哪个

+ stands for AND

- stands for NOT

[no operator] implies OR
     

source

应该与书写相同。 (scaisEdge的答案)

 SELECT 
 ...
 WHERE
    ( column LIKE "%word.1%" OR column LIKE "%word.2%" ) 
  AND
    column LIKE "%word3%"