我只是想知道以下所有连接是否在逻辑上等效,如果没有,为什么不呢?
SELECT t1.x, t2.y from t1, t2 where t1.a=t2.a and t1.b=t2.b and t1.c = t2.c; SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a where t1.b=t2.b and t1.c = t2.c; SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a and t1.b=t2.b where t1.c = t2.c; SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a and t1.b=t2.b and t1.c = t2.c;
我想我真正的问题是:将"where"与"on"结合起来做一些不同于仅仅具有多个条件的东西与"on"结合在一起?
我与MySQL合作,以防万一.
它们在逻辑上是等价的,应该产生相同的结果.但是,最后一个是首选的,因为它更准确地说明了查询的语义 - 即"连接表t1和t2".
WHERE子句应该用于"过滤"连接的结果 - 例如
... WHERE t2.some_col > 10
另外,正如康斯坦丁在另一个答案中所说,如果连接是一个OUTER连接,则4个查询会有所不同.