小编Tob*_*sey的帖子

在将表连接到依赖于表的视图时,这是Oracle中的错误吗?

我发现了我认为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)

mysql sql sql-server oracle

12
推荐指数
1
解决办法
327
查看次数

标签 统计

mysql ×1

oracle ×1

sql ×1

sql-server ×1