MYSQL JOIN ON X = IF(A,B,C) 条件
MYSQL JOIN ON X = IF(A,B,C) condition
我有两个 table,其中一个字段的相关字段编码样式略有不同。例如 table a
和 b
都有一个字段 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
我有两个 table,其中一个字段的相关字段编码样式略有不同。例如 table a
和 b
都有一个字段 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