问题描述
大家好,
我是最近从PL/SQL转换为SQL Developer & Oracle。因此,我大量使用 # temptables,并且非常不鼓励编写尝试在一个查询中执行所有操作的 “超级sql” 脚本。
现在,我了解到Oracle的情况恰恰相反。我对此没有任何问题,我只是对为什么不使用temptables感到困惑,因为它们对于在多步骤,复杂查询中开发逻辑非常有益。将所有内容干扰到单个查询中似乎很奇怪,并且会使编写初始脚本变得更加困难。我在下面提供了一个小例子。
所有输入表示赞赏。
-约翰
我是最近从PL/SQL转换为SQL Developer & Oracle。因此,我大量使用 # temptables,并且非常不鼓励编写尝试在一个查询中执行所有操作的 “超级sql” 脚本。
现在,我了解到Oracle的情况恰恰相反。我对此没有任何问题,我只是对为什么不使用temptables感到困惑,因为它们对于在多步骤,复杂查询中开发逻辑非常有益。将所有内容干扰到单个查询中似乎很奇怪,并且会使编写初始脚本变得更加困难。我在下面提供了一个小例子。
select patient, patientAGE, DOB into #tmp1 from Patients select patient, diabetesDX, DxDate into #tmp2 from diagnoses select patient, A1Clvl, MAX(dateoflab) as DOL into #tmp3 from labs where A1C >= 9 GROUP BY patient, A1Clvl select t1.*, t2.A1Clvl, t2.DOL, t3.A1Clvl, DOL from #tmp1 t1 LEFT JOIN #tmp2 t2 ON t2.patient = t1.patient LEFT JOIN #tmp3 t3 ON t3.patient = t3.patient
所有输入表示赞赏。
-约翰
专家解答
你有几个选择。我们在18c中有私有临时表,可以以与 # temp表相同的方式使用-您只需要定义它们即可。这样做的成本基本上是零,因为他们完全生活在你的会议。这里非常简单的演示
但是另一种选择是使用的子句,它使您可以保持类似于临时表的流,但仍然有一个查询。你上面的例子是:
但是另一种选择是使用的子句,它使您可以保持类似于临时表的流,但仍然有一个查询。你上面的例子是:
with tmp1 as ( select patient, patientAGE, DOB from Patients), tmp2 as ( select patient, diabetesDX, DxDate from diagnoses), tmp3 as ( select patient, A1Clvl, MAX(dateoflab) as DOL from labs where A1C >= 9 GROUP BY patient, A1Clvl ) select t1.*, t2.A1Clvl, t2.DOL, t3.A1Clvl, DOL from tmp1 t1 LEFT JOIN tmp2 t2 ON t2.patient = t1.patient LEFT JOIN tmp3 t3 ON t3.patient = t3.patient
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




