join语句的另一个子字符串中包含的字段的sql子字符串

jljoyd4f  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(370)

我使用了两个数据集从纽约市mta转门数据和地铁站位置一个包含在一个特定的地铁站收集的转门数据,而另一个包含的经纬度说,地铁站。表之间没有公共键。我曾希望使用地铁站的名称,但有许多不同的车站包含在一个表中相同的名称,此外,命名约定略有不同的表之间。为了克服这个问题,我想使用地铁站名称和地铁站中的行的组合来连接基于子字符串的表。
例如:
在火车站位置表中,一行包含

+------------------------+-----------------+
|Name                    |Line             |
+------------------------+-----------------+
|Lexington Ave - 59th St | 4-5-6-6 Express |
+------------------------+-----------------+

在火车站数据表中,一行可能是这样的

+---------+-----------------+
| Station | LineName        |
+---------+-----------------+
| 59 ST   | NQR456W         |
+---------+-----------------+

我能想到的最好的解决方法是使用 LIKE 关键字或 LOCATE 函数返回包含站和行的相同字符子串的单数行,即。 LIKE("%59%") AND NQR456 . 我希望忽略像st和ave这样的子字符串以及像''-''这样的字符。
一旦我有了这些行,我想用一个共享唯一id的正确键为我可以创建的每个站创建一个新列 JOIN 关于的声明。
事先谢谢你的帮助
我尝试了下面的查询,但由于只在另一个子串中搜索一个子串,因此无法正常工作

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:子字符串上的联接表

ftf50wuq

ftf50wuq1#

处理没有pk的数据一定很令人沮丧。。。
根据上面共享的数据,似乎可以去掉这两个字段的非数字字符并查找匹配项。59 = 59.
mysql 8支持regexp\u replace:https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-替换
在mysql 8之前,您可以创建一个自定义函数:mysql strip non numeric characters to compare

相关问题