Mysql - 选择 table1.something, table2.* WHERE 替换所有列,如 %something%

标签 mysql

我有以下查询:

SELECT `mmetal`.`id`, `mmetal`.`name`, `steelmarks`.`EN`, `steelmarks`.`DIN` FROM `mmetal` LEFT JOIN `steelmarks` ON `mmetal`.`id`=`steelmarks`.`id` WHERE REPLACE(REPLACE(REPLACE(REPLACE(`name`,' ',''),'\)',''),'\(',''),'-','') LIKE '%something%'

(替换 - 替换名称栏中的“”、“(”、“)”、“-”)

1) Steelmarks 表大约有 15 列 - 我需要替换

`mmetal`.`id`, `mmetal`.`name`, `steelmarks`.`EN`, `steelmarks`.`DIN`,`steelmarks`.`column3`,...,...,...`

类似的东西

`mmetal`.`id`, `mmetal`.`name`, `steelmarks`.*

但它不起作用

2) 我希望将 LIKE 函数与 REPLACE 一起使用到所有选定的列除了 id 列表,而不仅仅是“名称”。像这样的东西:

WHERE REPLACE(REPLACE(REPLACE(REPLACE(ALL COLUMNS,' ',''),'\)',''),'\(',''),'-','') LIKE '%something%'

现在我需要使用

WHERE REPLACE...column1 LIKE %something% OR REPLACE...column2 LIKE %something% OR REPLACE...column3 LIKE %something% OR ...

请问您对我的问题有什么建议吗?

最佳答案

replace 和 like 运算符一次仅对一列进行操作。以下内容可能会满足您的要求,但您仍然必须列出所有列:

REPLACE(REPLACE(REPLACE(REPLACE(concat_ws('|', col1, col2, col3, . . . ),' ',''),'\)',''),'\(',''),'-','') LIKE '%something%'

这会将值与分隔符连接在一起。

或者,您可以使用以下内容查询 INFORMATION_SCHEMA.COLUMNS:

select concat(replace(<YOUR EXPRESSION HERE>, 'col1', c.column_name), ' and')
from information_schema.columns c
where table_name = YOURTABLEHERE

然后使用结果构建您的查询。

关于Mysql - 选择 table1.something, table2.* WHERE 替换所有列,如 %something%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711745/

相关文章:

php - 将提交表单中的数据更新到 MySQL 数据库中

mysql - 关于子查询配对结果的建议

php - 使用联接时 Doctrine 查询生成器错误

php - 喜欢不工作

mysql - SQL 修改字母顺序,包括复合字符

php - 当数组为空时进行 while 循环?

php - Connection.php 第 673 行中的 QueryException :

MySQL表用FLOOR函数分区(不允许分区函数)?

Mysql 查询速度优化

mysql - “不完整”where 子句仍在运行