使用LIKE子句搜索多列值

时间:2018-01-04 04:09:44

标签: mysql

假设我有一列(id, col1, col2, col3)和一个值为hello world的条件。现在我可以用这个简单的查询来做到这一点:

SELECT 
    * 
FROM my_table 
WHERE 
    col1 LIKE 'hello world%' OR 
    col2 LIKE 'hello world%' OR
    col3 LIKE 'hello world%' 
ORDER BY id ASC;

是否有任何优雅的方式来实现相同的查询,因为如果偶然某些表有很多字段,编写许多字段会很麻烦。

在SO的某处找到此查询:

SELECT * FROM my_table WHERE 'hello world' IN(col1, col2, col3);

但我无法弄清楚如何使用LIKE子句这样做。谢谢!

2 个答案:

答案 0 :(得分:0)

IN

没有LIKE种关键字

但你可以这样做看起来更干净。

CREATE TEMPORARY TABLE patterns (
  pattern VARCHAR(20)
);

INSERT INTO patterns VALUES ('hello%'), ('hello%'), ('hello%');

SELECT t.* FROM my_table t JOIN patterns p ON (t.col LIKE p.pattern);

答案 1 :(得分:0)

我能够使用这个例子找到解决方案:

CREATE TABLE patterns2 (
  col1 VARCHAR(20),
  col2 VARCHAR(20)
);

INSERT INTO patterns2 VALUES ('hello', 'hell1'), 
('hello2', 'hello3'), 
('b', 'a'),
('c', 'hello19723');

运行此查询:

select * from patterns2 where CONCAT_WS(';', col1, col2) REGEXP '^hello|;hello'