首页 > 解决方案 > 如何从此联接中获取“NULL”数据?

问题描述

我想加入两个表:

t_act
ID_ACT   ACT
1        ACT1
2        ACT2
3        ACT3
4        ACT4
5        ACT5

t_work
NO   ID_WORK   ID_ACT   ACT
1         A         1   ACT1
2         A         3   ACT3

我寻找的输出是:

NO    ID_WORK    ID_ACT    ACT
1           A         1    ACT1
2           A         2    NULL
3           A         3    ACT3
3           A         4    NULL
4           A         5    NULL

我使用了 LEFT 或 RIGHT JOIN,但它没有产生所需的输出。

我的查询: SELECT * FROM t_work LEFT OUTER JOIN t_act ON t_work.ID_ACT = t_act.ID_ACT

标签: mysqlsqljoin

解决方案


看起来不错:

mysql> select * from t_act;
+--------+------+
| ID_ACT | ACT  |
+--------+------+
|      1 | ACT1 |
|      2 | ACT2 |
|      3 | ACT3 |
|      4 | ACT4 |
|      5 | ACT5 |
+--------+------+
5 rows in set (0.00 sec)

mysql> select * from t_work;
+----+---------+--------+------+
| NO | ID_WORK | ID_ACT | ACT  |
+----+---------+--------+------+
|  1 | A       |      1 | ACT1 |
|  2 | A       |      3 | ACT3 |
+----+---------+--------+------+
2 rows in set (0.00 sec)

输出:

mysql> select a.NO,a.ID_WORK, b.ID_ACT, a.ACT from t_act as b left     
join t_work as a using  (ID_ACT) order by ID_ACT;
+------+---------+--------+------+
| NO   | ID_WORK | ID_ACT | ACT  |
+------+---------+--------+------+
|    1 | A       |      1 | ACT1 |
| NULL | NULL    |      2 | NULL |
|    2 | A       |      3 | ACT3 |
| NULL | NULL    |      4 | NULL |
| NULL | NULL    |      5 | NULL |
+------+---------+--------+------+
5 rows in set (0.02 sec)

但我不确定您想要的输出中的 NO 和 ID_WORK 列。

ID_ACT 2 不在表 t_work 中。因此,您在所需输出中的 NO / ID_WORK 列下也会有 NULL。你确定,你会在这些列上有 VALUES 吗?


推荐阅读