如何使用条件ON进行连接

时间:2012-10-15 15:32:04

标签: sql

我想做如下:

Select * from
table1  a
inner join table2 b

on

a.id = b.id

if (some condition is met) //  Now it gets interesting!

begin

and a.name = b.name

end

显然,这不起作用。

如何才能最好地完成这项工作?

谢谢堆叠器!

3 个答案:

答案 0 :(得分:3)

为什么不能把条件放在WHERE子句中?

答案 1 :(得分:2)

通常,您可以进行类似的条件连接:

Select * 
from table1 a
inner join table2 b
on (a.conditional_field = 1 and a.id = b.id)
or (a.conditional_field = 2 and a.id2 = b.id2)

这里要注意的重要一点是,使连接条件成为可选,而不是连接本身。如果你想让连接本身成为条件,那就是外连接的用途:

Select * 
from table1 a
left outer join table2 b
on a.id = b.id

第一个查询将返回来自任一条件的所有匹配行为true。第二个查询将无条件地返回table1中的所有行,并且只返回条件为真的table2中的所有行。

答案 2 :(得分:1)

我会用这样的东西:

SELECT * FROM table1 a
JOIN table2 b ON (a.id = b.id)
WHERE NOT ( == your condition here == ) OR a.name = b.name

如果你真的想把它放在连接条件下,你可以这样做:

SELECT * FROM table1 a
JOIN table2 b ON (a.id = b.id AND (NOT ( == your condition here == ) OR a.name = b.name))

但我认为第一种形式更清晰。

编辑:正如@James Curtis在评论中所说:

  

重要的是要注意将条件放入的选项   对于外连接,WHERE子句仅对INNER JOIN有效   可能会消除行。