SQL如何让SELECT 查询结果额外增加自动递增序号

这个太有用了
举个栗子
表一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

也不是个好方法,万一顺序不唯一,也会出现上面的问题

你可能感兴趣的:(笔记)