SQL - ограничение и фильтрация соединения одновременно - PullRequest
0 голосов
/ 19 сентября 2018

Мне нужно решение для следующей проблемы.У меня есть две таблицы:

ids from new user (got by subquery)

+------------+
|  user_id   |
+------------+
| 1          | 
| 4          | 
| 5          |
+------------+

users (table with all users)
+------------+
|  user_id   |
+------------+
| 1          | 
| 2          | 
| 3          |
| 4          |
| 5          |
| ...        |
+------------+

Мне нужно объединить эти две таблицы.каждому новому пользователю необходимо ровно 3 подключений к другим пользователям.

, например:

+----------+------+
| new_user | user |
+----------+------+
| 1        | 2    |
| 1        | 3    |
| 1        | 4    |
| 4        | 1    |
| 4        | 2    |
| 4        | 3    |
| 5        | 1    |
| 5        | 2    |
| 5        | 3    |
+----------+------+

проблема состоит в том, чтобы ограничить записи точно 3 и исключить избыточные записи (например, 1 | 1, 3 | 3, ...)

1 Ответ

0 голосов
/ 19 сентября 2018

В PostgreSQL вы можете использовать запрос lateral для получения ограниченного числа строк в подзапросе.

Я не знаю точную структуру вашего основного запроса или подзапроса, но он должен выглядеть следующим образом:

select t.*, ls.*
  from main_table t,
  lateral ( -- lateral subquery
    select * from secondary_table s
      where s.col1 = t.col2 -- filtering condition, if needed
      fetch first 3 rows only -- limit to a max of 3 rows
  ) ls;

Боковой подзапрос выполняется один раз для каждой строки в main_table.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...