小编mat*_*tec的帖子

将过滤条件放在 join on 语句中是否等效?

我总是假设以下形式的陈述

SELECT * FROM A LEFT JOIN B ON (A.column1 = B.column2 AND B.column2 = 12321)
Run Code Online (Sandbox Code Playgroud)

总是等价于

SELECT * FROM A LEFT JOIN B ON (A.column1 = B.column2)
WHERE B.column2 = 12321
Run Code Online (Sandbox Code Playgroud)

更笼统地说:

SELECT * FROM A LEFT JOIN B ON (FOREIGN-KEY AND FILTER_ON(B))
WHERE FILTER_ON(A)
Run Code Online (Sandbox Code Playgroud)

应该相当于

SELECT * FROM A LEFT JOIN B ON (FOREIGN-KEY)
WHERE FILTER_ON(A) AND FILTER_ON(B)
Run Code Online (Sandbox Code Playgroud)

情况似乎并非如此...第一种类型提供的结果行数比第二种类型多。

问题:在哪些情况下我的假设是错误的?

sql oracle

2
推荐指数
1
解决办法
164
查看次数

标签 统计

oracle ×1

sql ×1