MYSQL JOIN ON X = IF(A,B,C) 条件

MYSQL JOIN ON X = IF(A,B,C) condition

我有两个 table,其中一个字段的相关字段编码样式略有不同。例如 table ab 都有一个字段 idx:

a.idx     b.idx
ABC       pfxABC
DEF       pfxDEF
GHI       GHI
JKL       JKL

如您在 table b 中所见,IDX 有时会填充前缀 pfx

我想在连接条件中加入 table 对 pfx 的剥离,以便规范化数据。类似于:

SELECT * FROM a
LEFT JOIN b
ON a.idx = IF(SUBSTRING(b.idx,3)='pfx', SUBSTRING(b.idx FROM 4), b.idx);

然而,这似乎永远不会产生 ABC = normalized(pfxABC)

的匹配项

将前三个字符与文字进行比较

SUBSTRING(b.idx,1,3) = 'pfx'
                ^^

您需要接受三个参数的 SUBSTRING 形式;第二个参数是起始位置,第三个参数是长度。在这个例子中,前三个字符。

要对此进行测试:

SELECT SUBSTRING('abcdef',1,3)

returns 'abc'

比较:

SELECT SUBSTRING('abcdef',3)

returns 'cdef'

参考:https://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_substring

SELECT * FROM a
LEFT JOIN b
ON CONCAT('pfx',a.idx) = b.idx

SELECT * FROM a
LEFT JOIN b
ON CONCAT('pfx',a.idx) = b.idx
  OR a.idx = b.idx