mysql 两个表通过他们俩的两个字段来做左连接是这样写吗

select * from t1 left join t2 on (t1.a = t2.a and t1.b = t2.b) ;

阅读 6.4k
2 个回答

是的。
举个栗子,表 t1 (b=10 * a)和 t2(b=100 * a) 数据如下,但是 t2 多一列且第一列为 10:

mysql> select * from t1;
+----+------+------+
| id | a    | b    |
+----+------+------+
|  1 |    1 |   10 |
|  2 |    2 |   20 |
+----+------+------+

mysql> select * from t2;
+----+------+------+
| id | a    | b    |
+----+------+------+
|  1 |    1 |   10 |
|  2 |    2 |  200 |
|  3 |    3 |  300 |
+----+------+------+
  • 对于 t1 到 t2 左连接
    可以看出左连接是从左表 t1 的角度出发,尽量到右表 t2 中满足匹配条件 t1.a = t2.a and t1.b = t2.b 的列。如果有,就列在结果集中,如果没有则默认为 NULL

    mysql> select * from t1 left join t2 on (t1.a = t2.a and t1.b = t2.b);
    +----+------+------+------+------+------+
    | id | a    | b    | id   | a    | b    |
    +----+------+------+------+------+------+
    |  1 |    1 |   10 |    1 |    1 |   10 |
    |  2 |    2 |   20 | NULL | NULL | NULL |
    +----+------+------+------+------+------+
  • 对于 t1 到 t2 右连接
    可以看出是从右表 t2 的角度出发,尽量到左表 t1 中满足匹配条件 t1.a = t2.a and t1.b = t2.b 的列。如果有,就列在结果集中,如果没有则默认为 NULL

    mysql> select * from t1 right join t2 on (t1.a = t2.a and t1.b = t2.b);
    +------+------+------+----+------+------+
    | id   | a    | b    | id | a    | b    |
    +------+------+------+----+------+------+
    |    1 |    1 |   10 |  1 |    1 |   10 |
    | NULL | NULL | NULL |  2 |    2 |  200 |
    | NULL | NULL | NULL |  3 |    3 |  300 |
    +------+------+------+----+------+------+

另外还有 INNER JOIN 和 FULL JOIN 等关联关系,可以参考:SQL 基础教程

是。。。这种问题要学会使用搜索引擎。。。

推荐问题