SHOPS
+----+---------------+
| id | shop_tag |
+----+---------------+
| 1 | 1234560000000 |
+----+---------------+
LOGS
+----+-------------------------------------+
| id | request |
+----+-------------------------------------+
| 1 | {"key":"123","tag":"123456*****"} |
+----+-------------------------------------+
列shop_tag为int类型,日志请求列为text类型,包含json字符串。
现在我想在从两列中提取 123456 后连接这两个表。
我正在尝试这个,但没有帮助
SELECT logs.id FROM logs INNER JOIN shops ON left(shops.shop_tag,6) = left(right(logs.request,6),26)
请注意,shop_tag 和 request 列的长度和结构都是固定的。
最佳答案
如果您使用的是 MySQL 5.7.13+,则可以使用 JSON 函数 ->>
从 request
列中提取 tag
值并直接比较左侧 6 个字符:
SELECT *
FROM SHOPS s
JOIN LOGS l ON BINARY LEFT(l.request->>'$.tag', 6) = BINARY LEFT(s.shop_tag, 6)
请注意,根据表的排序规则,您可能不需要条件中的 BINARY
。
关于MySQL 连接文本类型列中的特定子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59783059/