使用ANSI合规性多次连接表

时间:2014-04-14 15:09:18

标签: sql oracle ansi-sql

我正在从Oracle专有代码转换为ANSI标准。

在WHERE子句中的一个较旧的查询中,我们有这些语句:

这符合ANSI吗?

WHERE ee.person_code = p.person_code
AND eo.exam_code = ee.exam_code
AND ed.exam_code = eo.exam_code
AND ee.board_code = eo.board_code
AND eo.board_occurrence = ee.board_occurrence
AND eo.board_code = ed.board_code

我尝试了以下内容:

FROM people p
INNER JOIN exam_entries ee on ee.person_code = p.person_code
INNER JOIN exam_occurrences eo on ee.exam_code = eo.exam_code
INNER JOIN exam_details ed on ed.exam_code = eo.exam_code
INNER JOIN exam_entries on ee.board_code = eo.board_code
INNER JOIN exam_occurrences on eo.board_occurrence = ee.board_occurrence
INNER JOIN exam_details on eo.board_code = ed.board_code

后一个查询只是继续运行并且永远不会产生结果。可以理解我猜,我试图加入表然后重新加入它们。

如果第一个结果不符合ANSI标准,我将如何修复上述结果?

1 个答案:

答案 0 :(得分:2)

where子句中连接条件的使用符合 ANSI标准。不推荐,但合规。

您的查询的问题是您多次提到表。并且,某些表没有任何连接条件,例如第二个{​​{1}}。

根据您的示例exam_entries子句,您有多个与表相关的条件。为此,您只想扩展where子句中的条件,因此我认为您需要:

on