Получение двух строк "в области видимости" для вызова функции PostgreSQL: перекрестное соединение? - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть пользовательская функция 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
);

Это кажется грязным. Есть ли лучший способ настроить двух пользователей для вызова функции?

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Если в каждой таблице только один (кажется вероятным, что id - это ПК), то

SELECT similarity((SELECT a FROM users a WHERE a.id=123), 
   (SELECT b FROM users b WHERE b.id=456));
1 голос
/ 07 ноября 2011

Упрощенная форма, которая делает то же самое:

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