sqlite 为什么LEFT JOIN ON LIKE语句对“_”更改为“,”会产生不同的结果?

q43xntqr  于 2022-11-14  发布在  SQLite
关注(0)|答案(1)|浏览(245)

table1
编码|分类

ABC|ZMLND_XY_ABC
table2
类别|标签

MLND|3
ZMLND|4
如果table1category_分隔的部分等于table2category,我想将table1categoryMap到table2label。例如,table1中的ZMLND_XY_ABCtable2中的ZMLND匹配,而ZMLND_XY_ABCMLND中的MLND不匹配。
查询:

select * from table1 left join table2 on '_'||table1.category||'_' like '%_'||table2.category||'_%'

结果:

code  |    category     |  category_1  |  label
ABC   |  ZMLND_XY_ABC   |    MLND      |    3      <-  _MLND_ should not match
                                                       _ZMLND_XY_ABC_
ABC   |  ZMLND_XY_ABC   |    ZMLND     |    4

但是,我将_替换为,
table1
编码|分类

ABC|ZMLND,XY,ABC

select * from table1 left join table2 on ','||table1.category||',' like '%,'||table2.category||',%'

结果:
Code|类别|CATEGORY_1|标签
-|-|
ABC|ZMLND,XY,ABC|ZMLND|4
为什么会有不同的结果呢?

ubof19bj

ubof19bj1#

由于SQLITE like_%一样是一个特殊的字符。
如您所知,%匹配多个字符。
您似乎错过了_匹配任何单个字符。
比较,例如https://www.sqlitetutorial.net/sqlite-like/
看一下关于ESCAPE可选语法部分的https://www.sqlite.org/lang_expr.html,它可能有助于您编写查询。

相关问题