【发布时间】:2019-12-04 03:37:55
【问题描述】:
作为软件升级的一部分,我正在从旧数据库导入视图,我在工作时看到了这个FROM 子句。
FROM
t_store_master AS STM
RIGHT OUTER JOIN
dbo.t_shipping AS SHP
INNER JOIN
t_hu_master AS HUM
INNER JOIN
t_stored_item AS STO ON HUM.hu_id = STO.hu_id
ON SHP.shipment_id = HUM.reserved_for
AND SHP.location_id = HUM.location_id
INNER JOIN
dbo.t_carrier AS CAR ON SHP.carrier_code = CAR.carrier_code
LEFT OUTER JOIN
dbo.t_order_detail AS ORD
INNER JOIN
dbo.t_order AS ORM ON ORD.order_number = ORM.order_number
INNER JOIN
dbo.t_pick_detail PDL ON ORD.order_number = PDL.order_number
ON STO.type = PDL.pick_id
ON STM.store_id = HUM.control_number_2
据我了解,OUTER JOIN 需要 ON 子句才能被编译器正确解释。但是,肯定有一些我不知道的极端情况,因为上面的代码返回了良好的数据而不会引发任何错误。
在对 OUTER JOINs 的 MSDN 标准进行了一些观察和阅读之后,我仍然不知道 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 在此查询中所做的事情。
我知道INNER JOINs 下的多个ON 子句是必要的。在ON 子句和OUTER JOINs 之间似乎存在某种隐藏或隐含的映射。过去,我无法说出以这种方式编写查询的目的是什么。
有人能解释一下它是如何工作的以及为什么会这样写吗?
【问题讨论】:
标签: sql sql-server join view