假设我有一列(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子句这样做。谢谢!
答案 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'