难以理解细节的逻辑

时间:2014-10-25 04:39:54

标签: sql inner-join

我将使用以下查询来说明我的问题:

select a.shipperid,
       b.orderid,
       b.custid
from shippers a inner join orders b

on a.shipperid = b.shipperid

Shipperid是发货人表中的主键,它也是订单表中的外键 只有三个发货ID,每个发货ID与订单表中的许多不同订单相关联。当托运人ID匹配时,联接将匹配表。

但是,出货单表中的每个出货单ID都与订单表中的许多不同行相关联。

那么,我怎么知道发货人表中的行不是以任意方式与订单表中的行匹配?

2 个答案:

答案 0 :(得分:1)

在您当前的查询中,您正在进行内部联接,这将为您提供仅匹配行::

的输出

Joins

请参阅下图,以便您更好地理解。

所以要回答你的问题,你需要在你的情况下做左连接,如::

select a.shipperid,
       b.orderid,
       b.custid
from shippers a 
left join orders b

on a.shipperid = b.shipperid

如果该运费没有任何订单,则此结果将为Orders的空值。

答案 1 :(得分:0)

您的查询只要求获取可能彼此相关的所有(发货人ID,订单ID,custid)元组。换句话说,对于每个返回的元组,然后,shipperid在某些时候将orderid发送到custid。现在,如果您想进一步限制查询以缩小到其他条件下的结果子集,则由您决定。