使用like子句搜索多列值

o4tp2gmn  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(235)

假设我有一个专栏 (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;

有没有什么优雅的方法来实现相同的查询,因为如果碰巧某个表有很多字段,那么编写许多字段会很麻烦。
在此处某处找到此查询,因此:

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

但我不知道如何使用like子句来实现这一点。谢谢!

8zzbczxx

8zzbczxx1#

我通过这个例子找到了一个解决方案:

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'
guicsvcw

guicsvcw2#

根本没有 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);

相关问题