是否可以创建一个SQL查询,返回一个具有任何列匹配输入的行。例如:
SELECT row WHERE ANY column LIKE input
谢谢
答案 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)