在两个不同表的两个不同字段上的内部联接

时间:2015-06-16 17:48:41

标签: mysql sql

我有一个包含字段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相同吗?

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:1)

您可以使用SUBSTRING_INDEXUSERID中提取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,这将有效。

Demo here

答案 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,无论你使用什么,都应该有类似的子字符串函数