MySQL 多表Join条件在ON AND 和 Where的写法差异
在MySQL中,多表Join是一种常见的操作,它允许从多个表中根据相关联的列,来组合提取数据。MySQL中多表关联也是支持,多种方式.。比如内连接,左链接,右链接,笛卡尔积等方式。特别是在左右链接下,不同的写法颠覆了对SQL语句处理的理解。
示例分析:
两张表s1 和 s2,LEFT JOIN下s1.name IN(‘a’,‘c’)条件使用在AND 和 WHERE 下得到的结果集不一样。
mysql> CREATE TABLE s1(id int ,name varchar(20));
CREATE TABLE s2(id int);
INSERT INTO s1 VALUES(1,'a'),(2,'b'),(3,'c');
INSERT INTO s2 VALUES(1),(2);
#第一种方式:LEFT JOIN ON AND关联
mysql> SELECT s1.id,s1.name,s2.id FROM s1 LEFT JOIN s2 ON s1.id=s2.id AND s1.name IN('a','c');
#第二种方式:LEFT JOIN ON WHERE关联
mysql> SELECT s1.id,s1.name,s2.id FROM s1 LEFT JOIN s2 ON s1.id=s2.id WHERE s1.name IN('a','c');