我正在从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标准,我将如何修复上述结果?
答案 0 :(得分:2)
where
子句中连接条件的使用符合 ANSI标准。不推荐,但合规。
您的查询的问题是您多次提到表。并且,某些表没有任何连接条件,例如第二个{{1}}。
根据您的示例exam_entries
子句,您有多个与表相关的条件。为此,您只想扩展where
子句中的条件,因此我认为您需要:
on