条件连接最有效的实现

时间:2014-01-17 10:59:58

标签: sql sql-server tsql

在T-SQL中,我有一个视图,包括一个连接:

inner join db..address addr
on addr.town = f.town

我需要以某种方式修改此连接,如果f.town是一个特定值(让我们说" abc"),它还包括另一个值(即" abcd&# 34)。在所有其他情况下,它只需要f.town的值。像这样:

inner join db..address addr
on addr.town in ("abc", "abcd")

我试图这样做,但它不起作用:

inner join db..address addr
on (case when f.town = "abc"
         then addr.town = f.town
         else addr.town in (f.town, "abcd"))

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这可以解决这个问题吗?

inner join db.address addr 
on  f.town = addr.town OR (f.town='abc' AND addr.town ="abcd")

答案 1 :(得分:0)

如果我了解你,你是否正在尝试创建一个类似于此的结构? 没有测试它,这是一个混乱的事情 - 如果可以,请提供样本数据;

SELECT *
FROM TableA A
JOIN TableB B   ON 1 =  (   
                            CASE 
                                WHEN A.Moo = B.Moo THEN 1
                                WHEN A.Moo = B.Moo + 'x' THEN 1
                                ELSE 0
                            END 
                        )