组合多个或多个数据库,如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')
。但现在我必须继续使用这种传统格式。