连接表并选择一对多的一个值

Join tables and choose one value of one to many

我需要连接两个表,但可能存在多个匹配项

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 的左连接选项,如果在选定的 A 上有 C 0 和 1,那么 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  

这可能吗? 提前致谢。

您可以通过加入和分组来完成:

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() 从每个组的所有结果集中选择最小的,因此如果 10 都将返回,MIN() 将显示 0 因为它更小。

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 )