我需要一个包含两个表的连接,但可能存在多个匹配
t1 t2
A B A C
1 x 1 0
2 x 1 1
3 x 2 0
4 x 3 1
5 x 4 1
6 x 4 0
5 0
6 1
现在我需要一个来自t1和t2的左连接选项,如果有一个C 0和一个选中的A,那么C必须是0 (for A=1 and A=4)
。
所以结果应该是:
t3
A B C
1 x 0
2 x 0
3 x 1
4 x 0
5 x 0
6 x 1
这可能吗? 提前谢谢。
答案 0 :(得分:3)
您可以通过以下方式进行加入和分组:
SELECT t1.a,t1.b,MIN(t2.c)
FROM t1
LEFT JOIN t2
ON(t1.a = t2.a)
GROUP BY t1.a,t1.b
MIN()
选择每个组的所有结果集中的最小值,因此如果返回1
和0
,MIN()
将显示{{1}因为它较小。
答案 1 :(得分:2)
SELECT t1.A, B, C
FROM t1
LEFT OUTER JOIN
( SELECT A, C
FROM (
SELECT A, C,
ROW_NUMBER() OVER ( PARTITION BY A ORDER BY C ) AS rn
FROM t2
)
WHERE rn = 1
) t2
ON ( t1.A = t2.A )
或
SELECT t1.A, B, C
FROM t1
LEFT OUTER JOIN
( SELECT A, MIN(C) AS C
FROM t2
GROUP BY A
) t2
ON ( t1.A = t2.A )