sql - 具有不同列数的记录类型比较不会失败

标签 sql postgresql comparison record

为什么以下查询在 PostgreSQL 11.6 中不会触发“无法比较具有不同列数的记录类型”错误?

with
s AS (SELECT 1)
, main AS (
SELECT (a) = (b) , (a) = (a), (b) = (b), a, b -- I expect (a) = (b) fails
FROM s
  , LATERAL (select 1 as x, 2 as y) AS a
  , LATERAL (select 5 as x) AS b
)
select * from main;

虽然这个是这样的:

with
x AS (SELECT 1)
, y AS (select 1, 2)
select (x) = (y) from x, y;

最佳答案

请参阅 the docs on row comparison 中的注释

Errors related to the number or types of elements might not occur if the comparison is resolved using earlier columns.

在本例中,因为 a.x=1 且 b.x=5,所以它返回 false,而不会注意到列数不匹配。将它们更改为匹配,您将得到相同的异常(这也是第二个查询确实有该异常的原因)。

testdb=# with
s AS (SELECT 1)
, main AS (
SELECT a = b , (a) = (a), (b) = (b), a, b -- I expect (a) = (b) fails
FROM s
  , LATERAL (select 5 as x, 2 as y) AS a
  , LATERAL (select 5 as x) AS b
)
select * from main;
ERROR:  cannot compare record types with different numbers of columns

关于sql - 具有不同列数的记录类型比较不会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60121664/

相关文章:

mysql - SQL有没有办法在不使用UNION的情况下保留元数据的同时将多个时间列排序为一个?

sql - postgresql - 多列的前 5 个值,以及值的总和

database - 在具有共享/独占锁的数据库中,当事务开始时执行UPDATE语句时,锁是如何工作的?

c# - Protocol Buffer 与 JSON 或 BSON

regex - 正则表达式之间的距离

MySQL CASE更新多列

mysql - 我的带有两个 JOIN 的 MySQL 查询不起作用

SQL 排序并选择一个最接近的值

ruby-on-rails - 按独特的子协会分组

python 字符串比较 (==) 不工作