2

我想做如下:

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

显然,这是行不通的。

怎样才能最好地做到这一点?

谢谢堆垛机!

4

3 回答 3

3

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

于 2012-10-15T15:33:52.557 回答
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

第一个查询将返回任一条件为真的所有匹配行。第二个查询将无条件地返回所有行,table1并且仅返回table2条件为真的那些行。

于 2012-10-15T15:41:01.213 回答
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 有效,对于外连接,您可以消除行。

于 2012-10-15T15:34:47.220 回答