我想做如下:
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
显然,这是行不通的。
怎样才能最好地做到这一点?
谢谢堆垛机!
我想做如下:
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
显然,这是行不通的。
怎样才能最好地做到这一点?
谢谢堆垛机!
为什么你不能把条件放在 WHERE 子句中?
通常,您会像这样进行条件连接:
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
条件为真的那些行。
我会使用这样的东西:
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 有效,对于外连接,您可以消除行。