我有一个包含字段X,Y,Z,BAGID.
的表
BAGID的格式为(12345-400),其中12345是用户的ID,400是BAG的ID。
我有另一个包含字段A,B,C,USERID.
的表
USERID的格式为12345,与BAGID的第一部分相同。
那么可以在公共USERID上加入这两个表并获取USERID,X,Y,A,B字段吗?
Table 1:
X Y Z BAGID(userid+bagid)
1 2 4 12345-400
Table 2 :
A B C USERID
3 5 7 12345
我希望输出为:
X Y A B USERID
1 2 3 5 12345
是否可以加入这两个表?
select Table1.X, Table1.Y, Table2.A, Table2.B, Table2.USERID
from Table1
inner join Table2
on Table1.BAGID = Table2.USERID;
我知道我不能使用BAGID和USERID,因为它们不同。但是我可以使用Table1的BAGID的userid部分,它与Table2的USERID相同吗?
任何帮助都将不胜感激。
答案 0 :(得分:1)
您可以使用SUBSTRING_INDEX
从USERID
中提取BAGID
:
select Table1.X, Table1.Y, Table2.A, Table2.B, Table2.USERID
from Table1
inner join Table2 on SUBSTRING_INDEX(Table1.BAGID, '-', 1) = Table2.USERID
如果'-'
中只有一个BAGID
,这将有效。
答案 1 :(得分:0)
当然,只需加入LEFT(BAGID,5)。根据USERID DataType,您可能还需要对其进行CAST。
如果BAGIT的USERID部分是可变长度,则首先需要使用INSTR(BAGID,' - ')找到长度
答案 2 :(得分:0)
您可以在table1列的子字符串上进行内部联接
Select Table1.X, Table1.Y, Table2.A, Table2.B, Table2.USERID
From Table1
Inner join Table2
ON SUBSTRING_INDEX(Table1.BAGID,'-',1) = Table2.USERID;
答案 3 :(得分:0)
如果你正在使用t sql,你可以使用SUBSTRING(表达式,开始,长度)函数来获取bag id的前5个字符,然后加入该值。即
SELECT *
FROM table1
INNER JOIN table2 ON SUBSTRING(TABLE1.bagid, 0, 5) = table2.userid
如果不使用t sql,无论你使用什么,都应该有类似的子字符串函数