我有一个查询以下列方式连接2个表。
Table1有一个字段(LinkTo)可能(或可能不)出现在表Table2(Link,Link1,Link2)的三个字段之一中。我需要尝试将LinkTo加入Link,然后加入Link1然后加入Link2。一旦我匹配一个(比如Link1),我应该停止尝试加入。
由于
标记
答案 0 :(得分: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
加入......无论如何,您应该了解一个可能非常慢的执行计划......
答案 1 :(得分:0)
SELECT *
FROM TABLE1 t1
JOIN TABLE2 t2 ON (t1.LINKTO = t2.LINK OR
t1.LINKTO = t2.LINK1 OR
t1.LINKTO = t2.LINK2)
只要其中一个陈述为真,其他陈述就不会检查