将字符串拆分为数组,并执行类似操作以匹配另一列中的值

时间:2019-01-31 05:28:20

标签: mysql mysql-workbench

我有两列要在MYSQL表中进行比较,并想将第一列的值拆分为一个数组,并查找与第二列数组中的值匹配的数组中的任何值。这是一个示例:

Column1                     Column2
Walmart Supercenter         Walmart Sams
Home                        Home Depot
3M Logistics Co.            3M

如果我的方法是这样的话,那就永远不会匹配

column2 like concat('%',column1,'%')

我在寻找什么

column2 like concat('%',column1[0],'%') or column2 like concat('%',column1[1],'%')

1 个答案:

答案 0 :(得分:0)

逻辑

  
      
  • 使用custom split_str函数获得column1 [0]和column1 [1]
  •   
  • .. like .. or ..使用REGEXP + |
  •   

模式(MySQL v5.6)

CREATE TABLE T
    (`Column1` varchar(19), `Column2` varchar(12))
;

INSERT INTO T
    (`Column1`, `Column2`)
VALUES
    ('Walmart Supercenter', 'Walmart Sams'),
    ('Home', 'Home Depot'),
    ('3M Logistics Co.', '3M')
;

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

查询

select *
from T
where `Column2` REGEXP 
case when SPLIT_STR(`Column1`, ' ', 2) = '' then
    SPLIT_STR(`Column1`, ' ', 1)
else 
    concat(
      SPLIT_STR(`Column1`, ' ', 1) 
      ,'|'
      ,SPLIT_STR(`Column1`, ' ', 2)
    )  
end;

| Column1             | Column2      |
| ------------------- | ------------ |
| Walmart Supercenter | Walmart Sams |
| Home                | Home Depot   |
| 3M Logistics Co.    | 3M           |

View on DB Fiddle

虽然可以实现,但效率不高