我必须以下列方式对表执行选择:我在2列中搜索一些字符串,搜索字符串可以是一个或第二个,或两者中。
要从单个列中进行选择,我会使用以下内容:
SELECT * FROM table
WHERE TITLE LIKE '%pat1%' OR TITLE LIKE '%pat2%' OR TITLE LIKE '%pat3%' etc.
搜索模式没有限制。
但我想执行此查询,以便检查搜索模式是在列中还是在另一列中。
答案 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.)