mysql exists in join_使用 EXISTS 代替 IN 和 inner join

in和inner join在大多数情况下都是返回两表的交集,但是两者还是有区别的,如下例子

mysql> select * from a;+------+------+| id   | name |+------+------+|    1 | a    ||    2 | b    ||    3 | c    |+------+------+

MySQL> select * from b;

+------+------+

| id   | name |

+------+------+

|    1 | d    |

|    1 | g    |

|    2 | e    |

|    4 | f    |

+------+------+

mysql> select a.id, a.name from a where a.id in (select b.id from b);

+------+------+

| id   | name |

+------+------+

|    1 | a    |

|    2 | b    |

+------+------+

mysql> select a.id, a.name from a inner join b on (a.id = b.id);

+------+------+

| id   | name |

+------+------+

|    1 | a    |

|    1 | a    |

|    2 | b    |

+------+------+

mysql> select * from a inner join b on (a.id = b.id);

+------+------+------+------+

| id   | name | id   | name |

+------+------+------+------+

|    1 | a    |    1 | d    |

|    1 | a    |    1 | g    |

|    2 | b    |    2 | e    |

+------+------+------+------+

从查询结果中可以看出,in的结果是不会有重复的,对非主键进行join时,join的结果是有重复的。如果说还有另一个区别的话就是join会产生一个两表合并的临时表,in不会产生两表合并的临时表。


版权声明:本文为weixin_42202605原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。