相关疑难解决方法(0)

LATERAL和PostgreSQL中的子查询有什么区别?

由于Postgres能够进行LATERAL连接,我一直在阅读它,因为我目前为我的团队执行复杂的数据转储,其中包含大量低效的子查询,这使得整个查询需要四分钟或更长时间.

我知道LATERAL联接可能能够帮助我,但即使在阅读了像Heap Analytics 这样的文章之后,我仍然没有完全遵循.

LATERAL加入的用例是什么?LATERAL连接和子查询之间有什么区别?

sql postgresql subquery lateral-join

119
推荐指数
5
解决办法
7万
查看次数

如果未找到记录,则返回一个值

我有这个简单的声明:

SELECT idnumber FROM dbo.database WHERE number = '9823474'
Run Code Online (Sandbox Code Playgroud)

如果表中的任何位置都不存在该数字,则会失败.我想在这个声明中添加一些内容:
如果没有记录,则返回NULL,不要行.

有什么建议?

sql null select record

36
推荐指数
2
解决办法
8万
查看次数

select子句中多个set-returns函数的预期行为是什么?

我试图通过两个set-returns函数得到一个"交叉连接",但在某些情况下我没有得到"交叉连接",请参阅示例

行为1:当设置的长度相同时,它会逐个匹配每个集合中的项目

postgres=# SELECT generate_series(1,3), generate_series(5,7) order by 1,2;
 generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
(3 rows)

行为2:当设置的长度不同时,它会"交叉连接"这些集合

postgres=# SELECT generate_series(1,2), generate_series(5,7) order by 1,2;
 generate_series | generate_series 
-----------------+-----------------
               1 |               5
               1 |               6
               1 |               7
               2 |               5
               2 |               6
               2 |               7
(6 rows)

我想我在这里不了解一些事情,有人可以解释一下这种行为吗?

编辑:另一个例子,比以前更奇怪

postgres=# SELECT generate_series(1,2) x, generate_series(1,4) y order by x,y;
 x | y 
---+---
 1 | 1
 1 | 3 …

sql postgresql cross-join set-returning-functions

5
推荐指数
1
解决办法
951
查看次数