mysql - 使用 LIKE 或 MATCH 的 sql 查询

标签 mysql sql

我有一个包含 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');

SqlFiddleDemo

请记住,要使用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/

相关文章:

php - 循环 MySQL 结果

php - 在 MySQL 中透视一张表

c# - 带有 Windows Azure SQL 数据库的 SignalR Hub

sql - 使用 SQLCODE : -668, SQLSTATE : 57016, SQLERRMC 更新 db2 中的表失败:7;

异常模式下的 PHP PDO - 仍然需要检查执行函数(和其他函数)的返回?

mysql - SQL连接4张表

SQL Server 使用 "Group By ... With Cube"获取不同计数

mysql - 跟踪在 SQL sybase 中选择的用户

sql - H2 数据库是否能够使用聚合函数对 over 子句进行 SQL 查询?

mysql - SQL - 来自 [剧透 :abcdefgh] to [spoiler]