这个太有用了
举个栗子
表一t1
p1 | p1 |
---|---|
220 | 190 |
11 | 220 |
12 | 220 |
13 | 220 |
13 | 333 |
表二t2
p2 | p2 |
---|---|
220 | 190 |
11 | 190 |
12 | 190 |
13 | 190 |
13 | 190 |
将这个两个表拼接起来,看似简单,有一列是相同的,但是会出现笛卡尔乘积的问题
SELECT t1.p1,t1.c1,t2.p2,t2.c2 FROM tihuan t1
LEFT JOIN tihuan2 t2
ON t1.p1 = t2.p2
p1 | c1 | p2 | c2 |
---|---|---|---|
220 | 190 | 220 | 190 |
11 | 220 | 11 | 190 |
12 | 220 | 12 | 190 |
13 | 220 | 13 | 333 |
13 | 333 | 13 | 333 |
13 | 220 | 13 | 190 |
13 | 333 | 13 | 190 |
问题就出在13对应两个不同的值,不能作为唯一来匹配
那么额外增加自动递增序号,就很关键了
SELECT t1.c1,t2.c2 ,t1.p1,t2.p2 FROM (SELECT c1,p1, RANK() OVER (ORDER BY c1+p1) AS NO FROM tihuan ) t1
LEFT JOIN (SELECT c2,p2, RANK() OVER (ORDER BY c2+p2) AS NO FROM tihuan2 ) t2
ON t2.no = t1.no
c1 | c2 | p1 | p2 |
---|---|---|---|
220 | 190 | 11 | 11 |
220 | 190 | 12 | 12 |
220 | 190 | 13 | 13 |
333 | 333 | 13 | 13 |
190 | 190 | 220 | 220 |
也不是个好方法,万一顺序不唯一,也会出现上面的问题