结合多个OR和LIKE mySql

时间:2017-12-08 13:27:32

标签: mysql sql

我了解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;
        }

有没有办法让它变得更聪明/更短/更快? 谢谢!

1 个答案:

答案 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 ;