mysql中分别有a表和b表,需要通过a表的门店名称列取除了最后一个字以外的字符串模糊匹配b表的门店名称列,将匹配到的b表门店名称录入到a表中
时间: 2024-09-25 20:13:31 浏览: 30
在MySQL中,你可以使用 `LIKE` 运算符结合 `SUBSTRING_INDEX()` 函数来实现这个需求。`SUBSTRING_INDEX()` 可以截取字符串的一部分直到遇到指定的分隔符,这里我们可以选择去掉最后一个字符。假设a表的门店名称列为 `store_name_a`,b表的门店名称列为 `store_name_b`,可以编写如下的SQL查询:
```sql
UPDATE a
SET store_name_b = b.store_name_b
FROM a
JOIN (
SELECT store_name_b,
SUBSTRING_INDEX(store_name_b, ' ', -1) AS new_store_name_b
FROM b
) AS sub_b
ON SUBSTRING_INDEX(a.store_name_a, ' ', -1) LIKE CONCAT('%', sub_b.new_store_name_b, '%')
```
这个查询首先从b表中取出每个门店名称去掉最后一个空格后的部分(即除最后一个字外的部分),然后在a表中查找与之模糊匹配的门店名称。如果找到匹配项,就将b表的门店名称设置到a表对应的记录上。
相关问题
mysql中分别有a表和b表,需要通过a表的门店名称列取除了最后一个字以外的字符串模糊匹配b表的门店名称列,将匹配到的b表门店名称录入到a表的门店名称列中
在MySQL中,你可以使用`LEFT()`函数结合`LIKE`操作符以及`SUBSTRING_INDEX()`函数来实现这个需求。假设`a`表的门店名称字段是`store_name_a`,`b`表的门店名称字段是`store_name_b`,可以编写如下的SQL查询:
```sql
UPDATE a
SET store_name_a = SUBSTRING_INDEX(SUBSTRING_INDEX(store_name_a, ' ', -1), ' ', 1) + '%'
+ LEFT(SUBSTRING_INDEX(a.store_name_a, ' ', -1), LENGTH(SUBSTRING_INDEX(a.store_name_a, ' ', -1)) - 1)
JOIN b ON LOWER(SUBSTRING_INDEX(SUBSTRING_INDEX(a.store_name_a, ' ', -1), ' ', 1) + '%'
+ LEFT(SUBSTRING_INDEX(a.store_name_a, ' ', -1), LENGTH(SUBSTRING_INDEX(a.store_name_a, ' ', -1)) - 1)) LIKE LOWER(b.store_name_b);
```
这个查询首先从`a`表的门店名称中获取除最后一个字以外的部分,然后添加百分号进行模糊匹配,并连接到`b`表中进行查找。请注意,这里假设门店名称都是由空格分隔的单个词组成的。
mysql中分别有a表和b表,需要通过a表的门店名称列取倒数第二、第三个字模糊匹配b表的门店名称列,将匹配到的b表门店名称录入到a表中
在MySQL中,如果你想从`a`表中取每个门店名称的倒数第二、第三个字,并且模糊匹配`b`表的门店名称,你可以使用`SUBSTRING_INDEX()`函数来截取字符串的一部分,以及`LIKE`关键字进行模糊搜索。假设`a`表的门店名称列为`store_name_a`,`b`表的门店名称列为`store_name_b`,可以编写SQL查询如下:
```sql
UPDATE a
SET store_name_b = b.store_name_b
FROM (
SELECT store_name_a,
SUBSTRING_INDEX(SUBSTRING_INDEX(store_name_a, ' ', -2), ' ', -1) AS sub_string
FROM a
) a_sub
JOIN b ON b.store_name_b LIKE CONCAT('%', a_sub.sub_string, '%')
```
这个查询首先从`a`表中提取出倒数第二个和最后一个字符组成的子串,然后在`b`表中查找包含这个子串的所有记录,将它们的门店名称设为`a`表对应行的`store_name_b`。
阅读全文