我正在尝试使用JOIN
发出SQL请求,但是我有一个文件,其中ID的第一个位置包含字母。我在执行请求时需要忽略它。 service
列的值等于tbl2
的ID,不带'S'字符。
这是表格:
tbl1
-------------------
| id | service |
-------------------
| 58186 | S83968 |
| ... | ... |
tbl2
-------------------
| id | domain |
-------------------
| 83968 | serv123 |
| ... | ... |
我尝试过的事情:
SELECT `domain`
FROM `tbl2`
INNER JOIN `tbl1`
WHERE tbl2.id = tbl1.SUBSTR(service, 2)
AND id = '58186';
返回错误:
。#1630-功能tbl1.SUBSTR不存在。检查参考手册中的“函数名称解析和解析”部分
预期结果:
-----------
| domain |
-----------
| serv123 |
答案 0 :(得分:2)
您可以在下面尝试-您需要添加SUBSTR(tbl1.service, 2)
而不是tbl1.SUBSTR(service, 2)
SELECT `domain`
FROM `tbl2`
INNER JOIN `tbl1`
WHERE tbl2.id = SUBSTR(tbl1.service, 2)
AND tbl1.id = '58186'
答案 1 :(得分:2)
我实际上更喜欢将'S'
添加到其他ID:
SELECT tbl2.`domain`
FROM `tbl2` INNER JOIN
`tbl1`
ON CONCAT('S', tbl2.id) = tbl1.service
WHERE tbl1.id = '58186';
这似乎有点细微差别。但是,在某些情况下,tbl2.id
可以是数字。由于转换规则的原因,如果service
中的任何(不匹配)值不能转换为a,则可能会发生类型转换错误(在某些数据库中)或意外结果(在MySQL中)。数字。