首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JOIN语句的另一个子字符串中包含的字段的SQL子字符串

JOIN语句的另一个子字符串中包含的字段的SQL子字符串
EN

Stack Overflow用户
提问于 2020-07-17 07:06:12
回答 1查看 55关注 0票数 0

我使用来自NYC MTA turnstile datasubway station location的两个数据集,一个包含在特定地铁站收集的转门数据,另一个包含所述地铁站的经度和纬度。表之间没有公共键。我曾希望使用地铁站名称,但是在一个表中有许多不同的站包含相同的名称,此外,表之间的命名约定略有不同。为了克服这个问题,我想使用地铁站名称和地铁站中的线路的组合来连接基于子字符串的表。

例如:

在火车站位置表中,有一行包含

代码语言:javascript
复制
+------------------------+-----------------+
|Name                    |Line             |
+------------------------+-----------------+
|Lexington Ave - 59th St | 4-5-6-6 Express |
+------------------------+-----------------+

而在火车站数据表中,一行可能如下所示

代码语言:javascript
复制
+---------+-----------------+
| Station | LineName        |
+---------+-----------------+
| 59 ST   | NQR456W         |
+---------+-----------------+

我能想到的最好的解决办法是使用LIKE关键字或LOCATE函数执行某种类型的搜索,返回包含相同的车站和线路字符子字符串的单数行,即LIKE("%59%") AND NQR456。我希望忽略像ST和AVE这样的子字符串和像‘’-‘’这样的字符。

一旦我有了这些行,我想为我可以在其上执行JOIN语句的每个工作站创建一个新列,该列具有共享的唯一id的适当键。

预先感谢您的所有帮助

我尝试了下面的查询,但由于仅在另一个子字符串中搜索一个子字符串,因此无法正常工作

代码语言:javascript
复制
SELECT tsl.station, td.station, td.linename, tsl.line
FROM train_station_locations tsl, turnstile_data td
WHERE CONCAT('%',LOWER(tsl.station),'%')
 LIKE CONCAT('%', REPLACE(REPLACE(td.station," st","")," ",""),'%') 
 AND  CONCAT('%',LOWER(td.linename),'%') LIKE 
 REPLACE(CONCAT('%',LOWER(tsl.line),'%'),"-","");

我已经提到了以下问题

https://stackoverflow.com/a/40140482/9367155

SQL: Join tables on substrings

EN

回答 1

Stack Overflow用户

发布于 2020-07-17 07:56:01

处理没有PK的数据一定很令人沮丧……

根据上面分享的数据,似乎可以从两个字段中剔除非数字字符并查找匹配项。59 = 59。

MySQL 8支持REGEXP_REPLACE:https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace

在MySQL 8之前,您可以创建自定义函数:MySQL strip non-numeric characters to compare

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62944776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档