我了解LIKE
<{}}
IN
子句中不能使用col1, col2, col3
我的表格有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,%'
)
列。
如何使用LIKE运算符在多列中找到多个值。 目前我的查询是:
public static ArrayList<Integer> getSmallestList(ArrayList<Integer>... input) {
ArrayList<Integer> returnValue = null;
if (input.length > 0) {
returnValue = input[0];
for (ArrayList<Integer> inputIterator : input) {
if (inputIterator.size() < returnValue.size()) {
returnValue = inputIterator;
}
}
}
else
{
System.out.println("No input provided");
}
return returnValue;
}
有没有办法让它变得更聪明/更短/更快? 谢谢!
答案 0 :(得分:3)
您可以使用函数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 ;