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中有伦敦)的卡车和其他卡车?
答
这并不是很难做到的,它实际上是很基本的:
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。
你是什么意思'做最后一步......和其他人' – 2015-03-13 15:32:08
你需要澄清一点点,以确定你要找的最终结果。最终你需要什么样的信息才能脱离联盟,而无法摆脱第三张表本身。 – SFrejofsky 2015-03-13 15:36:20
第一个表格表示,例如,一盒从马德里到伦敦。第三张桌子是关于那个盒子的不同卡车(不直接)。我需要通过我的框(第一个表box_column)查询。并且查询查找框到达的位置(第一个表to_column),并返回第三个表中to_column中具有相同值的结果。如果箱子去伦敦,我需要第三张桌子上的卡车去伦敦,而不是其他的。 – ruisadias 2015-03-13 15:49:35