5

我有一个表(T1),其中 2 列(XY)是 id。这些对应的名称id在另一个表 ( T2) 中的列name

假设我只是在X那时使用,一个简单的内连接就可以解决我在获取名称方面的问题。

Select T1.somedata,T1.somedata1,T2.name from T1
Inner Join T2 ON T1.X=T2.id

但是,如果我想为T1.Y也解析名称怎么办?,name内部连接会将其解析为哪个?

Select T1.somedata,T1.somedata1,T2.name from T1
Inner Join T2 ON T1.X=T2.id
Inner Join T2 ON T1.Y=T2.id

上面的查询是错误的,我知道。我可以得到与name两者对应的 s吗?T1.XT1.YINNER Join

-初学者

4

4 回答 4

6

我建议始终为表和列添加别名。因此,您将确定选择了哪些数据。

select
    T1.somedata,
    T1.somedata1,
    T2X.name as XName,
    T2Y.name as YName
from T1 as T1
    inner join T2 as T2X on T2X.id = T1.X
    inner join T2 as T2Y on T2Y.id = T1.Y
于 2012-10-26T07:02:48.647 回答
2

这会选择两个名称作为单独的列:

Select T1.somedata,T1.somedata1,T2a.name, T2b.name 
from T1
Inner Join T2 as T2a ON T1.X=T2a.id 
Inner Join T2 as T2b ON T1.Y=T2b.id

以下将在结果集中生成两条记录:

Select T1.somedata, T1.somedata1, T2.name
from T1
Inner Join T2 ON T1.X=T2.id Or T1.Y=T2.id
于 2012-10-26T07:03:54.680 回答
1

您需要两次加入表T2并在名称上提供别名以避免歧义。

SELECT  a.*, 
        b.name as NameB, 
        c.name as NameC
FROM    T1 a
        INNER JOIN T2 b
            ON a.x = b.id
        INNER JOIN T2 c
            On a.y = c.id
于 2012-10-26T07:04:00.297 回答
0

您需要两次连接表 T2 并在名称上提供别名以避免歧义。

SELECT  a.*, 
        b.name as NameB, 
        c.name as NameC
FROM    T1 a
        INNER JOIN T2 b
            ON a.x = b.id
        INNER JOIN T2 c
            On a.y = c.id
于 2013-10-17T07:05:46.567 回答