2014-09-22 38 views
-1

我需要短SQL來留在T1連接T2只有單一的數學的Sql甲骨文LEFT JOIN只匹配單個行

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 
+0

如果T2有多行然後返回空F2,否則F2的值是正確的? – Sathish 2014-09-22 04:27:35

+0

您是否試圖在T1.F2 = T2.F1上將T1連接到T2,因此您可以輸出T1.F1和T2.F2,但只有在T2中有一行連接到T1時才能輸出T1,否則返回null?從你的問題來看,這遠非明確。你試過什麼了? – 2014-09-22 04:28:47

+0

如果T2有多行返回null,我不知道要使用哪個運算符,我試圖返回,只有當T2連接T1中的一行否則返回null – Maxrem 2014-09-22 04:34:24

回答

1

你可以使用一個簡單GROUP BY/COUNT如果行計數爲< = 1每命中的行和一個CASE表達計數到僅輸出值;

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

+0

是的工作!謝謝! – Maxrem 2014-09-22 06:54:01

1

通過使用組,以消除重複記錄,並做左的連接,以獲得從所有價值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