2012-10-09 165 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的答案... –