有人能解释一下这个WHERE子句在这个查询中是如何工作的吗?

    SELECT * FROM "User" AS U
    WHERE ((U."ID", U."age") > (23820, 25));

据我所知,Postgres返回id大于23820的用户,并忽略年龄列.

推荐答案

@乔纳斯梅茨勒的 comments 是正确的.Postgres显然将这一集用作:

Most left parameter uses the operator, all the others use equal
OR
 repeat until one parameter left (
     Remove most left parameter + 
     Most left parameter uses the operator, all the others use equal 
  )
(parameter_n, [parameter_n-1, ..., parameter_n-final]) <operator> (value_n, [value_n-1, ..., value_n-final])

equals to

(parameter_n = value_n AND parameter_n-1 = value_n-1 AND ... parameter_n-final <operator> value_n-final)
OR 
(parameter_n = value_n AND parameter_n-1 = value_n-1 AND ... parameter_n-final-1 <operator> value_n-final-1)
OR 
...
(parameter_n = value_n AND parameter_n-1 <operator> value_n-1)
OR 
(parameter_n <operator> value_n)

Sql相关问答推荐

从以前的非空值行中获取值

返回找到的最小和最大row_number()spark SQL

对多个条件的SQL进行排名

仅当交叉应用返回单值时才更新记录

如何从查询中的三个或更多个表中添加另一个相同的列?

重用传递给 node 的参数-postgres upsert查询

从结果SQL查询中排除空值

需要从键-值对数据中提取值

使用与JOIN一起使用的查询后进行分页和排序

提取连续时间戳范围的SQL

SQL:考虑合并分支计算分支的增长百分比

按所选的值将记录分组到不同的列中

标量子查询中的窗口函数不起作用

SQL:无重复项的两个聚合函数

自动生成计算频率的列

Oracle函数中无法动态迭代创建的SYS_REFCURSOR

面对来自以下两个代码的不同输出

CURRENT_ROW 窗口框架上的 SQL 滞后

BigQuery 错误:SELECT 列表表达式引用 esthetician.LICENSE_TYPE,它既未在 [49:8] 分组也未聚合

在现有日期列的查询结果中添加周数列