Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“得到两行”;“范围内”;对于PostgreSQL函数调用:交叉连接?_Sql_Postgresql_Join_User Defined Functions - Fatal编程技术网

“得到两行”;“范围内”;对于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));