【问题标题】:Oracle view or With ClauseOracle 视图或 With 子句
【发布时间】:2020-02-06 09:31:25
【问题描述】:

oracle视图和WITH子句有什么区别吗?我问这个是因为我使用 WITH 子句编写了一个 SQL。我在 WITH 子句中看到的 SQL 行为并没有给我一个一致的输出。

例如 WITH 子句中的 SQL 必须生成 20 条记录,并将这 20 条记录提供给其他 SQL。我观察到的趋势是某天 20 条记录,某天 18 或 17 甚至 14 条记录。在手动运行此 SQL 时,我得到 20 条记录。

with subject as (
    select subject_id
    from report_card
    where card_id = 100
)
select *
from student stud,
     subject s
where s.subject_id = stud.subject_id;

为了解决我的问题,我想到了在视图中编写 WITH 子句语句。

TIA

【问题讨论】:

  • 查询结果与 CTE 或视图不会有任何不同(当然,除非出现错误)。您加入 CTE 的表格的内容可能会发生变化吗?
  • 今日提示:始终使用现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。

标签: sql oracle view with-statement


【解决方案1】:

您的查询输出取决于此条件 s.subject_id = stud.subject_id,我猜,因此它正在发生变化。可能是主题表中的匹配记录较少。

您还可以使用以下查询来获得相同的输出。

select r.subject_id,s.* from report_card r join subject s on 
s.subject_id = r.subject_id and r.card_id=100;

【讨论】:

    猜你喜欢
    • 2011-08-18
    • 2020-05-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    相关资源
    最近更新 更多