Sql oracle左连接只匹配单行

时间:2014-09-22 04:21:57

标签: sql oracle

我需要短sql才能在T1上加入T2,只有单个数学

 T1      T2       Desired
F1  F2   F1  F2    F1  F2
1   A     A   RR    1  
2   B     A           2  UU
3   C     A   TT    3
4   D     B   UU   4  YY
5   E     C   VV    5  ZZ
           C   XX
           D   YY
           E   ZZ

2 个答案:

答案 0 :(得分:1)

使用group by消除带有重复项的记录并执行left join以获取T1中的所有值

   select T1.F1, ISNULL(T2.F2,'') from T1
    LEFT JOIN 
    ( 
      select F1 from T2
      group by F1
      having count(*) =1
    ) T
    on T1.F1 = T.F1
    LEFT JOIN T2
    on T2.F1 = T.F1

答案 1 :(得分:1)

您可以使用简单的GROUP BY/COUNT来计算每次点击的行数和CASE表达式,以便仅在行数为< = 1时输出值;

SELECT T1.F1, CASE WHEN COUNT(*)>1 THEN NULL ELSE MAX(T2.F2) END F2
FROM T1
LEFT JOIN T2 ON T1.F2 = T2.F1
GROUP BY T1.F1

An SQLfiddle to test with