2012-10-09 172 views
4

我一直在尋找的問題,但沒有找到答案。我想做一個與表1和表2的內部連接,但是一個字段是INT,另一個是VARCHAR(結構「A-INT」)。例如:sql join int varchar

Table1     Table2 

    ID NAME WHATEVER  ID USER 
    1 A-001 ---    1 001 
    2 A-002 ---    2 002 
    3 A-003 ---    3 003 
    3 A-004 ---    4 004 
    ... 

如何構建查詢?喜歡的東西:

... Table1 INNER JOIN Table2 ON Table1.NAME = Table2.[A-USER] ... 
+1

哪個dbms?對於這些操作,功能往往是不同的...... –

+0

它是你想要在連接中使用的'表2'的'ID'或'USER'字段嗎? – Guffa

回答

0

嘗試通過級聯,

SELECT * 
FROM Table1 a, Table2 b 
WHERE a.Name = 'A-' + b.User 

但是請注意,這會降低性能。

+0

@RaphaëlAlthaus問題說明'USER'具有'000'格式。 –

+0

是的,這就是爲什麼我刪除,對不起;)在MYSQL –

+0

這隻適用於如果b.User是一個字符串。如果你需要連接(和轉換類型),使用'concat('A-',b.User)' –

8

您需要的int值轉換爲varchar'A-' concatentate,或者得到varchar值的數字部分,並轉換爲int

這樣做是有點不同,這取決於它會是什麼樣的數據庫使用的是,對於SQL Server這樣的:

select t1.ID, t1.WHATEVER, t2.USER 
from Table1 t1 
inner join Table2 t2 on t2.ID = cast(substring(t1.NAME, 3, 3) as int) 
+0

謝謝Guffa! – Pete

+0

爲防萬一有人發現這個問題有用,在這種情況下,它將是子字符串(t1.NAME,3,3) – Pete

-3

你想要做內部聯接上Table1.NAME =表2 [A-用戶]。

如果Table1.NAME,Table2。[A-USER]列數據類型不同意味着,它不可能使用內部連接。

+1

這是不正確的,請參閱Guffa的答案... –