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

时间:2014-05-17 13:11:12

标签: 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)我希望在两个表中使用 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 ...

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

1 个答案:

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

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