没有多个LEFT的SQL Join

时间:2009-12-01 20:02:14

标签: sql database-design views

我在SQL DB中有以下表格

车辆, RepairCharges, TowCharges,

车辆总是只有1条记录,而其他表格则只有多条记录。我当前的LEFT OUTER Join工作但是如果连接表中有多个条目,那么它返回的行数就相同。

我的问题是,我需要创建一个将加入这些表的SQL视图,但是只返回Vehicle Table的单个记录,即使连接表中有多个记录也是如此。这是可能的VIEW,还是我必须使用不同的方法?

编辑:从答案中,我意识到,正如我原先想的那样,这不可能通过设计实现。鉴于相同的情况,你会如何处理这个?

最终结果是每张车的表格显示1行,并且同一行显示第一次拖车和维修费用,如果有更多拖车或修理费用,则显示每行的新行,复制车辆信息。

3 个答案:

答案 0 :(得分:6)

,除非您使用AGGREGATE函数,否则从1到MANY的连接将作为设计返回1到MANY。

你是否有具体的,例如只返回潜在的,或者最昂贵的。

显示您的查询,并指定您需要的许多内容。

答案 1 :(得分:4)

JOIN的结果将始终包含左侧的记录数乘以右侧的记录数。这是JOIN定义的一部分,如果你把它作为一个视图或保持它的临时SQL,它不会改变任何东西。

您需要做的是更改已加入的内容,因此它只有一行。您需要表达一个标准,从许多可能的候选人中选择您感兴趣的RepairCharges和TowCharges中哪些可能的行。上次约会?最高收费?最接近满月阶段?然后你只加入那个行。

示例:

SELECT * FROM Vechicles 
CROSS APPLY (
 SELECT TOP (1) * 
 FROM RepairCharges 
 WHERE VechicleID = Vechicles.VechicleID
 ORDER BY RepairDate DESC) AS LastRepair;

答案 2 :(得分:2)

除了汇总之外,您可以尝试在查询中添加DISTINCT子句。