返回任何列匹配输入的行

时间:2014-12-13 14:29:52

标签: mysql sql database

是否可以创建一个SQL查询,返回一个具有任何列匹配输入的行。例如:

SELECT row WHERE ANY column LIKE input

谢谢

3 个答案:

答案 0 :(得分:1)

我认为你正在寻找这个...

  SELECT * from table  WHERE column a LIKE '%input%' or column b LIKE '%input%'

答案 1 :(得分:1)

是的:

SELECT * FROM MyTable WHERE ColumnA LIKE '%input%' OR ColumnB LIKE '%input%'

如果您希望从字面上动态检查任何列,则需要动态构建列列表并使用prepared statement

这将使用INFORMATION_SCHEMA.COLUMNS表来查找表中的列,然后使用GROUP_CONCAT()将它们放入由where子句的其余部分分隔的字符串中。这本身就会给你:

ColumnA LIKE '%input%' OR ColumnB

然后你只需要CONCAT()语句的开头(SELECT .. WHERE)和最后一列的LIKE。所有这些都存储在变量@sql中,并用作准备语句的SQL:

SET @sql:=(SELECT CONCAT('SELECT * FROM MyTable WHERE ', GROUP_CONCAT(COLUMN_NAME SEPARATOR ' LIKE ''%test%'' OR '), ' LIKE ''%test%''') from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'MyTable');

# for debugging only
SELECT @sql;    

PREPARE dynamic_statement FROM @sql;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;

这是一个有效的SQL小提琴,用于演示:http://sqlfiddle.com/#!2/f475d/22

答案 2 :(得分:0)

使用In operator。由于wildcards中没有like operator你可以尝试这样的事情。

select row from table where input in (a,b)