将最大行数从 table 配对到另一个

Pairing a max number of rows from a table to another

假设我们有两个 tables,其中 T1 的行数少于 T2,我们希望将 T1 行与最多 3 个不同的随机 T2 行配对。每个 T1 行都必须配对,而并非所有 T2 行都需要配对

T1:
|c1  | ...|
------------
|'a' | ...|  
|'b' | ...|  
|'c' | ...|   


T2:
|c1 |...|
----------
|1  |...|  
|2  |...|  
|3  |...|   
|4  |...|   
|5  |...| 
|6  |...| 


|c1 |c2 |
----------
|'a' | 3| 
|'a' | 4| 
|'a' | 1| 
|'b' | 6| 
|'c' | 2| 
|'c' | 5| 

我试图给 T2 table 一个从 1 到 T1 行的随机数,目的是根据 T2 的随机数列和T1 的行号,但问题是我无法弄清楚如何将每个随机数出现的次数限制为 3。所以问题是配对这些 table 的最有效方法是什么?

我怀疑这个练习的用处,对于大表来说它不会很快,但你可以

SELECT a1.col1, a2.col2
FROM (SELECT row_number() OVER () AS n,
             c1 AS col2
      FROM t2) AS a2
   RIGHT JOIN (SELECT row_number() OVER (ORDER BY random()) AS n,
                     c1 AS col1
              FROM (SELECT c1 FROM t1
                    UNION ALL
                    SELECT c1 FROM t1
                    UNION ALL
                    SELECT c1 FROM t1) AS q
             ) AS a1
      USING (n);