我有3张桌子需要加入。一旦我加入前两个,我就会有两列,让我们称之为A
和B
。
A
和B
之间的关系是多对多的。所以我们可以:
A B
1 1
1 2
2 1
2 3
然后,我需要加入B栏上的第三个表格,给我:
A B C
1 1 5
1 2 6
2 1 9
2 3 2
现在,对于我的最终结果,我只想为每个唯一A
值添加一行,并且我希望根据给定{{1}的MAX
C
值选择该行}}
所以在这个例子中,最终的值是:
A
我有以下查询按预期工作,但我相当肯定这不是最好的方法:
A B C
1 2 6
2 1 9
答案 0 :(得分:1)
您的查询可以简化:
select distinct
。T3
。C
值。以下是修订版:
SELECT Temp.A, Temp.B, Temp.C
FROM (SELECT T1.A, T2.B, T3.C, MAX(T3.C) OVER (PARTITION BY T1.A) AS C1
FROM T1 INNER JOIN
T2
ON T1.X = T2.X INNER JOIN
T3
ON T2.B = T3.B
) Temp
WHERE Temp.C1 = Temp.C
请注意,如果T3
具有重复的最大值,则会返回重复项。要获得一个,您可以使用row_number()
代替:
SELECT Temp.A, Temp.B, Temp.C
FROM (SELECT T1.A, T2.B, T3.C,
ROW_NUMBER() OVER (PARTITION BY T1.A ORDER BY T3.C DESC) AS seqnum
FROM T1 INNER JOIN
T2
ON T1.X = T2.X INNER JOIN
T3
ON T2.B = T3.B
) Temp
WHERE seqnum = 1;