2015-06-16 109 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,無論你使用應該有一個類似的字符串函數

相關問題