mysql中分别有a表和b表,需要通过a表的门店名称列取除了最后一个字以外的字符串模糊匹配b表的门店名称列,将匹配到的b表门店名称录入到a表中
时间: 2024-09-25 07:13:31 浏览: 15
在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中,如果你想从`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`。
mysql中分别有a表和b表,需要通过a表的门店名称列模糊匹配b表的门店名称列,将匹配到的b表门店名称录入到a表中
在MySQL中,你可以使用`JOIN`和`LIKE`关键字结合来实现这种模糊匹配的功能。假设`a`表和`b`表都有一个名为`store_name`的字段,可以使用以下SQL查询:
```sql
UPDATE a
SET b_store_name = b.store_name
FROM a
LEFT JOIN b ON a.store_name LIKE CONCAT('%', b.store_name, '%')
WHERE a.store_name IS NULL OR b.store_name IS NOT NULL;
```
这个查询做了两件事:
1. `LEFT JOIN`: 将`a`表的所有记录都与`b`表按`store_name`列进行连接,即使`a`表中有找不到匹配的记录。
2. `LIKE CONCAT('%', b.store_name, '%')`: 使用通配符`%`对`a`表的`store_name`进行模糊匹配,查找包含`b`表`store_name`的字符串。
然后,`WHERE`条件过滤结果,只保留那些`a.store_name`为空或者`b.store_name`非空(即找到匹配项)的行,把`b.store_name`的值设给`a.b_store_name`。