MySQL查询使用相同的选择模式选择2列

时间:2010-02-28 13:51:28

标签: sql mysql

我必须以下列方式对表执行选择:我在2列中搜索一些字符串,搜索字符串可以是一个或第二个,或两者中。

要从单个列中进行选择,我会使用以下内容:

SELECT * FROM table 
WHERE TITLE LIKE '%pat1%' OR TITLE LIKE '%pat2%' OR TITLE LIKE '%pat3%' etc. 

搜索模式没有限制。

但我想执行此查询,以便检查搜索模式是在列中还是在另一列中。

3 个答案:

答案 0 :(得分:3)

将两列连接成一列。

where CONCAT(title,subject) like '%pat1%'

也请查看

MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION] )

答案 1 :(得分:1)

在我主要使用的DBMS中,我将创建一个临时表来保存N个模式字符串,然后在与主表的交叉连接中使用它来对多个模式和多个列进行查询:

CREATE TEMP TABLE SearchPatterns(Pattern VARCHAR(32));
INSERT INTO SearchPatterns('%patt1%');
INSERT INTO SearchPatterns('%path2%');
INSERT INTO SearchPatterns('%pith3%');
INSERT INTO SearchPatterns('%sith4%');

SELECT DISTINCT T.*
  FROM MainTable AS T CROSS JOIN SearchPatterns AS P
 WHERE T.Col1 LIKE P.Pattern
    OR T.Col2 LIKE P.Pattern;

当然,这扩展到任意数量的模式和任意数量的列。我无法告诉你的是MySQL是否足够灵活,允许你这样做。

答案 2 :(得分:0)

你能不能只OR两列?

SELECT * FROM table WHERE 
col1 LIKE '%path1%' OR col2 LIKE '%path1%' OR 
col1 LIKE '%path2%' OR col2 LIKE '%path2%' OR
etc.

或者取决于搜索的确切语义:

SELECT * FROM table WHERE 
( col1 LIKE '%path1%' OR col1 LIKE '%path2%' OR etc.) OR 
( col2 LIKE '%path1%' OR col2 LIKE '%path2%' OR etc.)