sql服务器连接3个表,不在第三个表的其他列中

sql服务器连接3个表,不在第三个表的其他列中

问题描述:

因此,我有两个由第三个表连接的表。 喜欢的东西:sql服务器连接3个表,不在第三个表的其他列中

第一个表:

 
+------------+--------------+--------------+------------+ 
| box_column | code_column | from_column | to_column | 
+------------+--------------+--------------+------------+ 
|  12345 | sdsad1  | madrid  | london  | 
+------------+--------------+--------------+------------+ 

二表:

 
+-------------+--------------+ 
| code_column | truck_column | 
+-------------+--------------+ 
| sdsad1  | truck1  | 
| sdsad1  | truck2  | 
| sdsad1  | truck3  | 
+-------------+--------------+ 

三表:

 
+--------------+-------------+-----------+ 
| truck_column | from_column | to_column | 
+--------------+-------------+-----------+ 
| truck1  | madrid  | paris  | 
| truck2  | paris  | calais | 
| truck3  | calais  | london | 
+--------------+-------------+-----------+ 

有一个连接,仅仅有数量后的箱子,有没有什么办法可以区分使最后一段腿(第三张桌子在to_column中有伦敦)的卡车和其他卡车?

+0

你是什么意思'做最后一步......和其他人' – 2015-03-13 15:32:08

+0

你需要澄清一点点,以确定你要找的最终结果。最终你需要什么样的信息才能脱离联盟,而无法摆脱第三张表本身。 – SFrejofsky 2015-03-13 15:36:20

+0

第一个表格表示,例如,一盒从马德里到伦敦。第三张桌子是关于那个盒子的不同卡车(不直接)。我需要通过我的框(第一个表box_column)查询。并且查询查找框到达的位置(第一个表to_column),并返回第三个表中to_column中具有相同值的结果。如果箱子去伦敦,我需要第三张桌子上的卡车去伦敦,而不是其他的。 – ruisadias 2015-03-13 15:49:35

这并不是很难做到的,它实际上是很基本的:

SELECT  * 
FROM  dbo.code c 
INNER JOIN dbo.jointable j on c.code = j.code 
INNER JOIN dbo.truck t on j.truck = t.truck 
WHERE  c.box = 12345 
AND   c.[to] = t.[to] 

哪里代码是你的第一个表,jointable是你的第二个表,车是你的第三个表。

这个查询的输出是:

box code from to  code truck truck from to 
--------------------------------------------------------------------- 
12345 sdsad1 madrid london sdsad1 truck3 truck3 calais london 

,仅保留卡车作为输出,更换

SELECT * 

SELECT t.truck 

最后但并非最不重要:我没有看到任何主键,也没有在你的模型中的外键。也许你把它排除在外了。如果没有,请使用keys and constraints