【问题标题】:MYSQL JOIN ON X = IF(A,B,C) conditionMYSQL JOIN ON X = IF(A,B,C) 条件
【发布时间】:2015-06-23 04:30:31
【问题描述】:

我有两个表,其中一个字段的相关字段的编码风格略有不同。例如表ab 都有一个字段idx

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

正如您在表 b 中看到的,IDX 有时会填充前缀 pfx

我想在连接条件中加入去除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) 产生匹配项

【问题讨论】:

    标签: mysql join substring conditional conditional-statements


    【解决方案1】:

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

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

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

    对此进行测试:

    SELECT SUBSTRING('abcdef',1,3)
    

    返回'abc'

    比较:

    SELECT SUBSTRING('abcdef',3)
    

    返回'cdef'

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

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

        猜你喜欢
        • 2021-08-19
        • 2018-01-29
        • 1970-01-01
        • 1970-01-01
        • 2014-11-17
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 2011-09-27
        相关资源
        最近更新 更多