简体   繁体   中英

Sql oracle left join only match single rows

I need short sql to left join T2 on T1 only if single math

 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

USING group by to eliminate the records with duplicates and doing left join to get all values from 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

You could use a simple GROUP BY/COUNT to count the rows per hit and a CASE expression to only output the value if the row count is <=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 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM