2013-06-26 42 views
0

如何使用case子句修改连接子句;比如我想表加入另一列如果column1为空,如:SQL连接案例

SELECT * FROM MYTABLE 
LEFT JOIN OTHERTABLE ON 
CASE WHEN MYTABLE.A IS NULL THEN MYTABLE.B = OTHERTABLE.A 
ELSE MYTABLE.A IS NOT NULL THEN MYTABLE.A = OTHERTABLE.A 

(完全瞎编,遗憾的语法错误:))

+0

是'IS NULL'测试一个你实际上是试图解决,或者仅仅是一个例子吗? - 从目前的答案可以看出,NULL根本不需要case语句。 –

+2

实际上它可以是任何东西,因此它不是特定的。 – Sin5k4

+1

CASE ... END语句总是返回一个值,您可以在连接或比较中使用该值。您不能在CASE语句中使用任何连接或其他条件。 – Arvo

回答

4

试试这个:

SELECT * 
FROM MyTable M 
LEFT JOIN OtherTable O ON(CASE WHEN M.A IS NULL THEN M.B ELSE M.A END) = O.A 
1
SELECT * FROM MYTABLE 
LEFT JOIN OTHERTABLE ON COALESCE(MYTABLE.A, MYTABLE.B) = OTHERTABLE.A 
+0

你的答案处理了具体的例子,但没有回答实际的问题 - 问题是关于将'CASE'语句合并到'JOIN'中 –

0

您可以使用isnull()或coalesce()来检查空值。

1

刚刚尝试下面的代码:

SELECT * FROM MYTABLE 
LEFT JOIN OTHERTABLE ON OTHERTABLE.A = isnull(MYTABLE.A,MYTABLE.B)