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