2015-06-16 110 views
0

我有一个表格,其中包含字段X,Y,Z,BAGID. BAGID的格式为(12345-400),其中12345是用户的标识,400是BAG的标识。两个不同表格的两个不同字段的内部连接

我有另一个表,其中有字段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相同吗?

任何帮助,将不胜感激。

回答

1

可以使用SUBSTRING_INDEX提取USERIDBAGID

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

0

当然,只要加入左(BAGID,5)。根据USERID数据类型的不同,您可能需要对其进行CAST处理。

如果BAGIT的用户ID部分是可变长度,你首先需要找到使用长度INSTR(BAGID,“ - ”)

0

您可以在内部表1列

Select Table1.X, Table1.Y, Table2.A, Table2.B, Table2.USERID 
From Table1 
Inner join Table2 
ON SUBSTRING_INDEX(Table1.BAGID,'-',1) = Table2.USERID; 
0

的子参加如果你采用t SQL可以使用SUBSTRING(表情,开始位置,长度)函数只得到第一袋号的5个字符,然后加入该值。即

SELECT * 
FROM table1 
INNER JOIN table2 ON SUBSTRING(TABLE1.bagid, 0, 5) = table2.userid 

如果不采用t SQL,无论你使用应该有一个类似的字符串函数

相关问题