我有两列要在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],'%')
答案 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 |
虽然可以实现,但效率不高