我发现了我认为Oracle中存在的一个错误,但我想知道是否记录了我错过的内容.
小提琴:Oracle:http ://sqlfiddle.com/#!4/43c19/2 SQL Server:http ://sqlfiddle.com/#!3/ddc49/1 MySql:http://sqlfiddle.com/#!2 / 43c195/1
基本上我有一个主表,我把它连接到一个辅助表.然后我离开了加入视图.如果我在视图的连接中指定我只想在辅助表中的列不为空时加入,则会得到意外的结果.通过显示查询可以最好地解释这一点:
SELECT
1,
MainTable.*
FROM
MainTable
LEFT JOIN SecondaryTable ON MainTable.KeyColumn = SecondaryTable.KeyColumn
LEFT JOIN ViewWithoutSecondary ON ((SecondaryTable.KeyColumn IS NOT NULL) AND SecondaryTable.KeyColumn = ViewWithoutSecondary.KeyColumn)
UNION ALL
SELECT
2,
MainTable.*
FROM
MainTable
LEFT JOIN SecondaryTable ON MainTable.KeyColumn = SecondaryTable.KeyColumn
LEFT JOIN ViewWithSecondary ON ((SecondaryTable.KeyColumn IS NOT NULL) AND SecondaryTable.KeyColumn = ViewWithSecondary.KeyColumn)
Run Code Online (Sandbox Code Playgroud)
请参阅下面的创建脚本以自行测试.在SQL Server和MySql中,我得到相同的结果,但Oracle是不同的.架构中有三个表和两个视图.视图定义如下:
CREATE VIEW ViewWithoutSecondary
AS
SELECT
TertiaryTable.KeyColumn,
TertiaryValue + 1 ViewValue
FROM
TertiaryTable
CREATE VIEW …Run Code Online (Sandbox Code Playgroud)