我有以下Oracle风格的查询,我必须将其转换为ANSI SQL查询,以便我可以理解它们是什么类型的连接:
SELECT
ID,
(SELECT TABLE1.COL1
FROM VIEW1 TABLE1
WHERE TABLE1.COL2 = (
SELECT TABLE2.COL2
FROM VIEW2 TABLE2
WHERE TABLE2.ID = TABLE3.ID
)
AND TABLE1.COL3 = (
SELECT TABLE2.COL3
FROM VIEW2 TABLE2
WHERE TABLE2.COL3 = TABLE3.COL3
)
FROM VIEW3 TABLE3
这是我无法弄清楚的子查询。我已经尝试过阅读关于这个主题的Oracle文档(https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10002.htm#i2066611),并尝试使用Google搜索示例或解释或这是什么样的连接,但我只能在网上找到关于更简单的连接的信息。我真的被困在这个问题上,希望得到任何帮助。
我也尝试在Oracle SQL Developer中转换此查询,但它不能为我转换子查询。
1条答案
按热度按时间cig3rfwq1#
这是一个相关子查询;它不是联接,而是ANSI标准:
如果你想把它转换成
JOIN
,那么:VIEW1
可以有多行匹配,则这是不相同的,因为您的查询将返回TOO_MANY_ROWS
异常,而带有LEFT OUTER JOIN
的查询将返回多行;然而,对于不会导致异常的所有数据集,它们应该是相同的。