2011-03-11 30 views
2

我有一個查詢以下面的方式加入2個表。SQL加入第一個匹配的字段

表1有一個字段(LinkTo),可能(或可能不會)出現在表格Table2(Link,Link1,Link2)的三個字段之一中。我需要嘗試加入鏈接到鏈接,然後鏈接1然後鏈接2。只要我匹配一個(比如Link1),我應該停止嘗試加入。

感謝

馬克

+0

爲什麼你關心的秩序,它會嘗試比賽?如果't1.LinkTo IN(T2.Link,T2.Link1,T2.Link2)'''''你爲什麼需要規定查詢的執行方式? – 2011-03-11 11:52:29

+0

@Martin:它可能被稱爲「業務需求」:-) – 2011-03-11 13:17:38

+0

有無論如何有一個字段指示哪個連接完成說'LinkedwithLink2',如果它與link2鏈接? – Mark 2011-03-11 13:56:38

回答

2

這可能是你在找什麼。它加入你提到的字段的順序(編輯回答從評論的問題):

SELECT t1.*, t2.*, 
    CASE WHEN (t1.LINKTO = t2.LINK) THEN 'LinkedWithLink' 
     WHEN (t1.LINKTO <> t2.LINK 
      AND t1.LINKTO = t2.LINK1) THEN 'LinkedWithLink1' 
     WHEN (t1.LINKTO <> t2.LINK1 
      AND t1.LINKTO <> t2.LINK1 
      AND t1.LINKTO = t2.LINK2) THEN 'LinkedWithLink2' END AS chosen_join 
FROM TABLE1 t1 
[LEFT OUTER] JOIN TABLE2 t2 
ON (t1.LINKTO = t2.LINK OR 
    (t1.LINKTO <> t2.LINK AND t1.LINKTO = t2.LINK1) OR 
    (t1.LINKTO <> t2.LINK1 AND t1.LINKTO <> t2.LINK1 AND t1.LINKTO = t2.LINK2) 

注意,我不知道你是否需要一個LEFT OUTER加入或不...在任何情況下, ,你應該知道這個潛在的非常緩慢的執行計劃的...

+0

看起來不錯,謝謝。 – Mark 2011-03-11 13:14:02

+0

無論如何有一個字段指示哪個連接完成說'LinkedwithLink2'如果它與link2鏈接? - – Mark 2011-03-11 13:57:01

+0

是的。檢查出更新的答案... – 2011-03-11 14:39:00

0
SELECT * 
FROM TABLE1 t1 
    JOIN TABLE2 t2 ON (t1.LINKTO = t2.LINK OR 
        t1.LINKTO = t2.LINK1 OR 
        t1.LINKTO = t2.LINK2) 

只要語句之一爲真,其他沒有檢查

+0

我不確定...取決於RDBMS – 2011-03-11 11:39:22

+0

非常感謝。我只有甲骨文的經驗 – 2011-03-11 11:46:02

相關問題