我将使用以下查询来说明我的问题:
select a.shipperid,
b.orderid,
b.custid
from shippers a inner join orders b
on a.shipperid = b.shipperid
Shipperid是发货人表中的主键,它也是订单表中的外键 只有三个发货ID,每个发货ID与订单表中的许多不同订单相关联。当托运人ID匹配时,联接将匹配表。
但是,出货单表中的每个出货单ID都与订单表中的许多不同行相关联。
那么,我怎么知道发货人表中的行不是以任意方式与订单表中的行匹配?
答案 0 :(得分:1)
在您当前的查询中,您正在进行内部联接,这将为您提供仅匹配行::
的输出
请参阅下图,以便您更好地理解。
所以要回答你的问题,你需要在你的情况下做左连接,如::
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。现在,如果您想进一步限制查询以缩小到其他条件下的结果子集,则由您决定。