我正在实施一个查询系统。我实现了 unnest 功能。现在用户询问是否在单个 select 语句中使用多个 unnest。我使用 PostgreSQL 作为一种指南,因为大多数用户在我们的查询系统之前使用它。
PostgreSQL 有这样奇怪的行为:
postgres=# select unnest(array[1,2]), unnest(array[1,2]);
unnest | unnest
--------+--------
1 | 1
2 | 2
(2 rows)
postgres=# select unnest(array[1,2]), unnest(array[1,2,3]);
unnest | unnest
--------+--------
1 | 1
2 | 2
1 | 3
2 | 1
1 | 2
2 | 3
(6 rows)
我的实现总是生成为笛卡尔积。我想知道,这背后的正确逻辑是什么?PostgreSQL 是在做正确的事还是只是一个错误?我没有在 ANSI 文档或 PostgreSQL 文档中找到明确的描述。