Split String to Array и аналогичное значение в другом столбце - PullRequest
0 голосов
/ 31 января 2019

У меня есть два столбца для сравнения в таблице 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 голосов
/ 31 января 2019

Логика

  • использование custom split_str функция get столбец1 [0] и столбец1 [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           |

Просмотр на DB Fiddle

Хотя этот способ может быть достигнут, но эффективность не очень хорошая

...