我有一个包含 13 列的表,其中有 5 列包含字符串数据或 VARCHAR 数据。
现在我有一个字符串让我们说“abc”。
我想编写一个 sql 查询来获取在这 5 列中具有此“abc”字符串的所有行。 "abc"可以是列的部分数据的列数据。
我使用了LIKE
函数
SELECT * FROM table WHERE col1 OR col2 OR col3 OR col4 OR col5 LIKE '%abc%';
但它没有用,n 取回了所有行。
我也不知道如何使用MATCH
函数,我不太会sql。所以任何人都可以提供帮助。
最佳答案
您可以多次指定条件:
SELECT *
FROM table
WHERE col1 LIKE '%abc%'
OR col2 LIKE '%abc%'
OR col3 LIKE '%abc%'
OR col4 LIKE '%abc%'
OR col5 LIKE '%abc%';
这会非常慢,因为您有多个 OR
和非 SARGable 条件。
或者:
SELECT *
FROM table
WHERE CONCAT_WS('^', col1,col2,col3,col4,col5) LIKE '%abc%';
使用
MATCH
(利用全文索引的首选方案):
SELECT *
FROM table
WHERE MATCH(col1, col2,col3,col4, col5) AGAINST ('abc');
请记住,要使用MATCH
,您需要先创建索引:
ALTER TABLE tab ADD FULLTEXT ft_index_name (col1,col2,col3,col4,col5);
关于mysql - 使用 LIKE 或 MATCH 的 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242702/