我有以下表格,其中包含以下属性:
Op(OpNo, OpName, Date)
OpConvert(OpNo, M_OpNo, Source_ID, Date)
Source(Source_ID, Source_Name, Date)
Fleet(OpNo, S_No, Date)
我有当前的多个JOIN查询,它给出了我想要的结果:
SELECT O.OpNo AS Op_NO, O.OpName, O.Date AS Date_Entered, C.*
FROM Op O
LEFT OUTER JOIN OpConvert C
ON O.OpNo = C.OpNo
LEFT OUTER JOIN Source D
ON C.Source_ID = D.Source_ID
WHERE C.OpNo IS NOT NULL
问题是这个。我需要在前面的多个JOIN语句上加入Fleet表,以将相关的S_No附加到多个JOIN表。我是否仍然可以使用LEFT OUTER JOIN完成此操作,或者我是否必须使用不同的JOIN语句?另外,我会加入哪个表格?
请注意,我只熟悉LEFT OUTER JOINS。
感谢。
答案 0 :(得分:2)
我想在您的情况下,您可以使用INNER JOIN
或LEFT JOIN
(这与SQL Server中的LEFT OUTER JOIN
相同。
INNER JOIN
表示只有在Fleet
表中有相应记录(基于连接条件)时才会返回其他表中的记录。LEFT JOIN
表示即使Fleet
表中没有相应的记录(基于连接条件),它也会返回其他表中的记录。在这种情况下,Fleet
中的所有列都将返回NULL。对于要加入的表,您应该根据数据结构加入更符合逻辑的表。
答案 1 :(得分:2)
是的,您可以在加入条件中使用之前提到的所有表格。实际上,JOINS(无论是INNER,LEFT OUTER,RIGHT OUTER,CROSS,FULL OUTER还是其他)都是左联的,i。即它们被隐式评估,好像它们将被包括在左边的括号中,如下所示:
FROM ( ( ( Op O
LEFT OUTER JOIN OpConvert C
ON O.OpNo = C.OpNo
)
LEFT OUTER JOIN Source D
ON C.Source_ID = D.Source_ID
)
LEFT OUTER JOIN Fleet
ON ...
)
这类似于+
或-
隐含使用括号的方式,i。即
2 + 3 - 4 - 5
评估为
(((2 + 3) - 4) - 5)
顺便说一句:如果您使用C.OpNo IS NOT NULL
,则LEFT OUTER JOIN Source D
会被视为INNER JOIN
,因为您明确删除了所有" OUTER&#34 ;行。