假設我們有兩個表,其中 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 表一個從 1 到 T1 行的亂數,目的是根據 T2 的亂數列和 T1 的行號加入兩個表,但問題是我想不通如何將每個亂數出現的次數限制為 3。所以問題是對這些表進行配對的最有效方法是什么?
uj5u.com熱心網友回復:
我懷疑這個練習的用處,對于大桌子來說它不會很快,但你可以
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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474684.html
標籤:sql PostgreSQL 加入
上一篇:查詢資料透視表以回傳參考行的串列
