错误代码:1064您的sql语法有一个错误-string\u split

64jmpszr  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(489)
SELECT er.pNumber, er.name, ep.fPosition, eo.res
FROM events_shot er, events_shot_final ep, events_shot_final_res eo, events_gear era
WHERE era.idShot=er.idShot AND ep.idPhoto=era.idPhoto AND eo.idShot=era.idShot
    AND era.idShot=42 AND eo.shotType='PRT'
    AND er.pNumber IN (
        SELECT *
        FROM STRING_SPLIT(eo.photosId,'-')
        )

shotsid是一个类似12-1-8-7的字符串。。。以“-”分隔n个编号id
很遗憾,查询返回此错误:
错误代码:1064。sql语法有错误;请查看与mysql服务器版本对应的手册,以获取第7行中使用near'(eo.photosid,'-')的正确语法
如果您能提供任何帮助,我们将不胜感激。

0g0grzrc

0g0grzrc1#

尝试使用正则表达式进行匹配,而不是拆分字符串,将出现错误的代码替换为

AND REGEXP_INSTR(eo.photosId, CONCAT('-?', er.pNumber, '-?')) > 0

更新
下面的正则表达式没有试图匹配破折号破折号,而是匹配not number not number只匹配给定的确切数字

AND REGEXP_INSTR(eo.photosId, CONCAT('(^|[^0-9])', er.pNumber, '([^0-9]|$)')) > 0
50pmv0ei

50pmv0ei2#

你的数据库结构不好, eo.photosId 应该是一张单独的table。
但在不改变数据库结构的情况下,您有一个极不理想的解决方案:

AND concat('%-', er.pNumber,'-%') LIKE concat('-', eo.photosId, '-')

你必须改变 12-1-8-7-12-1-8-7- 并用分隔符查找id -1- + % -像任何字符运算符一样

相关问题