为 PostgreSQL 函数调用获取“范围内”的两行:交叉连接?

Posted

技术标签:

【中文标题】为 PostgreSQL 函数调用获取“范围内”的两行:交叉连接?【英文标题】:Getting two rows "in scope" for a PostgreSQL function call: cross join? 【发布时间】:2011-11-07 16:14:01 【问题描述】:

我有一个用户定义的函数similarity(),它比较两个用户并返回一个分数。现在,调用查询看起来像:

SELECT similarity(user1, user2)
FROM (
  SELECT users.id
  FROM users AS user1
  WHERE users.id = 123
)
CROSS JOIN
(
  SELECT users.id
  FROM users AS user2
  WHERE users.id = 456
);

这感觉很乱。有没有更好的方法来设置函数调用的两个用户?

【问题讨论】:

【参考方案1】:

如果每个表中只有一个(似乎id 是一个PK)那么

SELECT similarity((SELECT a FROM users a WHERE a.id=123), 
   (SELECT b FROM users b WHERE b.id=456));

【讨论】:

谢谢 - 这就是我所缺少的(我可以在 SELECT 子句而不是 FROM 子句中进行子查询)。【参考方案2】:

完全相同的简化形式:

SELECT similarity(a, b)
FROM   users a, users b
WHERE  a.id = 123
AND    b.id = 456;

【讨论】:

我不清楚;子查询在实际查询中是必需的。 @JayLevitt 您可以插入子查询来代替表格。请注意,如果两个元组之一不存在,则 Andrews 变体会产生 不同 结果。这就是我选择这种形式的原因。

以上是关于为 PostgreSQL 函数调用获取“范围内”的两行:交叉连接?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:如何在给定日期范围内的每一天为每个帐户选择最后余额? [复制]

在当前范围内没有为 struct `schema::todos::table` 找到名为 `table` 的函数或关联项

如何在 Rails 范围内模拟 Postgresql EXCEPT 运算符?

C ++:在范围内获取整数的最快方法

如何从全局范围调用 jquery 函数内的方法?

Google Sheets Column函数使用当前行获取右侧范围内所有列的平均值