|
|
1
0
像这样的
|
|
|
2
0
接受的答案没有错,但我想展示一个替代方案,并添加一些颜色。您也可以使用通用表表达式(CTE)来代替子查询,它提高了可读性,但也具有一些其他功能。以下是使用CTE的示例:
在我看来,抽象更整洁,使代码更易于遵循(从而维护)。 其他注意事项:
这个
在这个例子中,你可能没有错过任何月份,但有可能。。。特别是如果您将这个概念扩展到将来的查询中。在这种情况下,您可能需要考虑完全的外部联接,而不是内部联接(您有几个月出现在用户中,但可能不在付款中,反之亦然):
CTE相对于子查询的另一个好处是可以重用它们。在这个例子中,我想模仿完整的外部联接概念,但有一个额外的转折点——我每月都有来自另一个表的数据,我希望在查询中得到这些数据。CTE让我可以随心所欲地使用CTE进行“支付”和“用户”。在这里,我在all_dates CTE中使用它们,并在主查询中再次使用它们。通过创建“all_dates”,我现在可以使用左联接,避免联接中奇怪的合并(不是错误的,只是丑陋)。
关键是您可以重用CTE。 最后一个优点是,您可以声明CTE物化或非物化(默认)。物化CTE本质上将预处理和存储结果,在某些情况下可能具有更好的性能。另一方面,非物化的on将模拟标准子查询,这很好,因为您可以将where子句条件从查询外部传递到查询内部。 |
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |