我有以下查询:
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)我希望在两个表中使用 REPLACE 到所有所选列除id
列之外的LIKE函数,而不是只有"名称"。类似的东西:
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 ...
您对我的问题有什么建议吗?
答案 0 :(得分:0)
替换和类似操作符一次只能在一列上操作。以下可能会执行您想要的操作,但您仍需列出所有列:
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
然后使用结果构建您的查询。