我有一個查詢以下面的方式加入2個表。SQL加入第一個匹配的字段
表1有一個字段(LinkTo),可能(或可能不會)出現在表格Table2(Link,Link1,Link2)的三個字段之一中。我需要嘗試加入鏈接到鏈接,然後鏈接1然後鏈接2。只要我匹配一個(比如Link1),我應該停止嘗試加入。
感謝
馬克
我有一個查詢以下面的方式加入2個表。SQL加入第一個匹配的字段
表1有一個字段(LinkTo),可能(或可能不會)出現在表格Table2(Link,Link1,Link2)的三個字段之一中。我需要嘗試加入鏈接到鏈接,然後鏈接1然後鏈接2。只要我匹配一個(比如Link1),我應該停止嘗試加入。
感謝
馬克
這可能是你在找什麼。它加入你提到的字段的順序(編輯回答從評論的問題):
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
加入或不...在任何情況下, ,你應該知道這個潛在的非常緩慢的執行計劃的...
SELECT *
FROM TABLE1 t1
JOIN TABLE2 t2 ON (t1.LINKTO = t2.LINK OR
t1.LINKTO = t2.LINK1 OR
t1.LINKTO = t2.LINK2)
只要語句之一爲真,其他沒有檢查
我不確定...取決於RDBMS – 2011-03-11 11:39:22
非常感謝。我只有甲骨文的經驗 – 2011-03-11 11:46:02
爲什麼你關心的秩序,它會嘗試比賽?如果't1.LinkTo IN(T2.Link,T2.Link1,T2.Link2)'''''你爲什麼需要規定查詢的執行方式? – 2011-03-11 11:52:29
@Martin:它可能被稱爲「業務需求」:-) – 2011-03-11 13:17:38
有無論如何有一個字段指示哪個連接完成說'LinkedwithLink2',如果它與link2鏈接? – Mark 2011-03-11 13:56:38