“得到两行”;“范围内”;对于PostgreSQL函数调用:交叉连接?
我有一个用户定义的函数“得到两行”;“范围内”;对于PostgreSQL函数调用:交叉连接?,sql,postgresql,join,user-defined-functions,Sql,Postgresql,Join,User Defined Functions,我有一个用户定义的函数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 ); 这感觉很乱。有没有更好的方法
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
);
这感觉很乱。有没有更好的方法来设置函数调用的两个用户?简化形式,其作用完全相同:
SELECT similarity(a, b)
FROM users a, users b
WHERE a.id = 123
AND b.id = 456;
如果每个表中只有一个(似乎
id
是主键),则
我不清楚;子查询在实际查询中是必需的。@JayLevitt您可以插入子查询代替表。请注意,如果两个元组中的一个不存在,Andrews变体会产生不同的结果。这就是我选择这个表单的原因。谢谢-这就是我所缺少的(我可以在SELECT子句而不是FROM子句中进行子查询)。
SELECT similarity((SELECT a FROM users a WHERE a.id=123),
(SELECT b FROM users b WHERE b.id=456));