我想做如下:
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
显然,这不起作用。
如何才能最好地完成这项工作?
谢谢堆叠器!
答案 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有效 可能会消除行。