2011-05-07 28 views
1

我有两个表:sql简单3表连接使用同一个表?

表1
ID,姓名1

表2
ID,name2a,name2b

表2的列名name2a,并name2b是引用表1的ID。我需要创建一个基于从表1的拉两个名称的查询表使用2

因此,如果表一个包含ID的:

1 Peter 
2 Paul 

和表2包含:

1 1 2 
2 2 2 

然后select语句应该给我:

Peter Paul 
Paul Paul 

我在弯附近去试图建立THI s SQL和最好的我想出了:

SELECT table1.name AS 'name', table1.name AS 'Other name' 
FROM table1, table2 
WHERE table1.id = table2.name2a 

哪些只给了我name2a列正确。

任何帮助表示赞赏!我想我需要做一个加入,但我真的很挣扎...

回答

1

你试过用INNER JOIN吗?

SELECT table1.name AS'name',table1.name AS'Other name' FROM table1 INNER JOIN table2 ON table1.id = table2.name2a;

对不起,如果我没有帮助,没有那么好在SQL自己hehe。

+1

不要自我卖空......来这里学习别人是学习复杂查询和理解表之间更好关系的好方法。 – DRapp 2011-05-07 23:48:56

2
 select foo.*, t1.x, t2.y 
    join t1 on t1.id = foo.a 
    join t1 as t2 on t2.id = foo.b 

如果col a或col b为null,请使用左连接。

1

你的问题是,你需要参考table1两次:一次为普通table1.name,并再次查找table2指向什么。您可以参加多次一个表,如果你给他们的别名:

SELECT t1.name1, o.name1 
FROM table1 t1 
JOIN table2 t2 ON t1.id  = t2.name2a 
JOIN table1 o ON t2.name2b = o.id -- And JOIN back to table1 to get the name1 
5

开始你的第二台并两次加入到表1(分别为不同的别名),然后从每个别名表1项目获取的名称字段。

select 
     T2.ID, 
     TJ1.Name1 as FirstName, 
     TJ2.Name1 as SecondName 
    from 
     Table2 t2 
     join Table1 TJ1 
      on t2.Name2a = TJ1.ID 
     join Table1 TJ2 
      on t2.Name2b = TJ2.ID