Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
组合多个或多个数据库,如mySql_Mysql_Sql - Fatal编程技术网

组合多个或多个数据库,如mySql

组合多个或多个数据库,如mySql,mysql,sql,Mysql,Sql,我理解LIKE不能用于 我的表有col1、col2、col3列 如何使用LIKE运算符在多个列中查找多个值。 目前我的查询是: SELECT col1, col2, col3 FROM table_name WHERE ( Col1 = '38' OR Col1 LIKE '%,38' OR Col1 LIKE '%,38,%' OR Col1 LIKE '38,%' ) OR ( col2 = '38' OR col2 LIKE '%

我理解
LIKE
不能用于

我的表有
col1、col2、col3

如何使用LIKE运算符在多个列中查找多个值。 目前我的查询是:

SELECT col1, col2, col3
FROM table_name
WHERE
(   
    Col1 = '38' 
    OR Col1 LIKE '%,38'
    OR Col1 LIKE '%,38,%' 
    OR Col1 LIKE '38,%'
)
OR
(
    col2 = '38' 
    OR col2 LIKE '%,38'
    OR col2 LIKE '%,38,%' 
    OR col2 LIKE '38,%'
)
OR
(
    col3 = '38' 
    OR col3 LIKE '%,38'
    OR col3 LIKE '%,38,%' 
    OR col3 LIKE '38,%'
)
有没有办法让它更智能/更短/更快?
谢谢

您可以使用函数FIND_IN_SET()。MySQL有一个专用函数FIND_IN_SET(),如果在包含逗号分隔值的字符串中找到值,该函数将返回字段索引

示例

DROP TABLE table_name;

CREATE TABLE table_name
(col1 VARCHAR(100));

INSERT INTO table_name VALUES ('38');
INSERT INTO table_name VALUES ('37,38,39');
INSERT INTO table_name VALUES ('37,38');
INSERT INTO table_name VALUES ('38,39');
INSERT INTO table_name VALUES ('48');


SELECT col1
FROM table_name
WHERE FIND_IN_SET(38, col1) > 0;
你的解决办法是

SELECT col1, col2, col3
FROM table_name
WHERE FIND_IN_SET(38, col1) > 0 
  OR FIND_IN_SET(38, col2) > 0 
  OR FIND_IN_SET(38, col3) > 0 ;

对更正数据并停止在同一列中存储多个值,这样就不必费劲地将其从逗号分隔的值中解析出来。如果一开始就愚蠢地决定不花时间正确定义表,那么问题在于,在需要数据时,检索数据的难度会增加100倍。然后它变成
WHERE(col1='38'或col2='38'或col3='38')
。但现在我必须继续使用这种传统格式。