为 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` 的函数或关联项