Mysql 左连接上的Concat正则表达式
我需要从一个表中获取数据,其中行值是逗号分隔的字符串,如:Mysql 左连接上的Concat正则表达式,mysql,sql,Mysql,Sql,我需要从一个表中获取数据,其中行值是逗号分隔的字符串,如:5,10,16,25,7我还使用了左连接,因此我需要这样的内容: // ... SELECT ... s.`other_thing` LEFT JOIN `something` s ON w.`whatever` = REGEXP CONCAT('(,|^)', s.`id`, '(,|$)') // ... 我需要得到这样的东西:(,| ^)5(,|$)onon 编辑:我用一个简单的解决了这个问题,比如CONCAT(“%”,s.
5,10,16,25,7
我还使用了左连接
,因此我需要这样的内容:
// ...
SELECT ... s.`other_thing`
LEFT JOIN `something` s
ON w.`whatever` = REGEXP CONCAT('(,|^)', s.`id`, '(,|$)')
// ...
我需要得到这样的东西:(,| ^)5(,|$)
onon
编辑:我用一个简单的解决了这个问题,比如CONCAT(“%”,s.id“%”)
编辑2:如果您想压缩正则表达式,可以使用:
REGEXP-concat('(^ |,)(',s.id')(,|$))
我强烈反对使用此数据模型。你的下一个问题很可能是关于性能的——实际上没有希望了。您应该为列表提供一个连接/关联表,而不是将多个值存储在一个字符串中
有时候,我们会被其他人非常非常糟糕的设计决策所困扰。如果是这种情况,MySQL有一个帮助功能:
SELECT ... s.`other_thing`
FROM x LEFT JOIN
something s
ON find_in_set(s.id, x.really_bad_list_format) > -
我强烈反对这种数据模型。你的下一个问题很可能是关于性能的——实际上没有希望了。您应该为列表提供一个连接/关联表,而不是将多个值存储在一个字符串中 有时候,我们会被其他人非常非常糟糕的设计决策所困扰。如果是这种情况,MySQL有一个帮助功能:
SELECT ... s.`other_thing`
FROM x LEFT JOIN
something s
ON find_in_set(s.id, x.really_bad_list_format) > -
是的,这不是我用过的最好的数据模型。。。我现在使用的是
比如CONCAT(“%”,s.id“%”)
,谢谢你的回答!是的,这不是我用过的最好的数据模型。。。我现在使用的是比如CONCAT(“%”,s.id“%”)
,谢谢你的回答!