这两个查询有什么区别?
SELECT f.name, u.name, u.id FROM families f JOIN units u ON f.unit_id = u.id HAVING u.id IN( 43, 413, 22 )
和:
SELECT f.name, u.name, u.id FROM families f JOIN units u ON f.unit_id = u.id WHERE u.id IN( 43, 413, 22 )
这两个查询的结果完全相同。那么区别在哪里呢?
sql中的have子句和where子句的区别在于where子句不能和聚合一起使用,但是have子句可以。一种思考方式是,have 子句是 where 子句的附加过滤器。