加入条件ON与WHERE

时间:2016-07-05 14:24:25

标签: mysql join where-clause

可能是一个愚蠢的问题,但为什么这两个mysql查询会给出不同的结果?

select * from table1 p join table2 m on p.mid=m.mid and m.onw=1

select * from table1 p join table2 m on p.mid=m.mid where m.onw=1

前者提供大约5倍的行数。 “和m.onw = 1”的限制与后一个查询中的“where”子句的限制方式不一样吗?

从phpmyadmin执行的实际实时查询是:

select * from xcart_products p join xcart_manufacturers m on p.manufacturerid=m.manufacturerid and m.onwalmart=1 
 (197023 total)

select * from xcart_products p join xcart_manufacturers m on p.manufacturerid=m.manufacturerid where m.onwalmart=1 
(38996 total)

更新。似乎是phpmyadmin中的一个错误。如果我使用count(*)而不是*,那么结果是相同的。或许count(*)导致返回更少的行?

2 个答案:

答案 0 :(得分:1)

是的,它应该提供相同数量的行,无论您放置过滤器的位置如何。

第一次查询:它将加入2个表并过滤m.onw=1

第二次查询:它会加入2个表格,然后在m.onw=1上过滤

答案 1 :(得分:0)

最好将它添加到join语句中,而不是将它作为性能点的where子句添加它会更好