2015-03-13 60 views
0

因此,我有兩個由第三個表連接的表。 喜歡的東西: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

回答

1

這並不是很難做到的,它實際上是很基本的:

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