左连接 2 个表不工作

left join 2 tables not working

我有 2 个表:

表 1: 'op_ats'

 | ID1    | numero |id_cofre | id_chave | estadoAT
 |  1     |  111   |   1     |   3      |   1
 |  2     |  222   |   3     |   3      |   2
 |  3     |  333   |   1     |   4      |   2
 |  4     |  444   |   1     |   2      |   3

Table_2: 'op_ats_cofres_chaves'

 | ID2 | num_chave |
 |  1  |  A        |
 |  2  |  B        |
 |  3  |  C        |
 |  4  |  D        |
 |  5  |  E        |

我有这个SQL:

SELECT chaves.*, ats.numero numAT, ats.estadoAT
FROM op_ats_cofres_chaves chaves
LEFT JOIN op_ats ats ON ats.id_chave_cofre = chaves.id AND ats.id_cofre = 1

有了这个我得到以下结果:

| ID2 | num_chave | numAT | estadoAT |
|  1  |  A        | 444   |   3      |
|  2  |  B        | NULL  |   NULL   |
|  3  |  C        | 111   |   1      |
|  4  |  D        | 333   |   2      |
|  5  |  E        | NULL  |   NULL   |

现在的问题是我想过滤表 1 中的行,但只有 'estadoAT' 列的值为 1 和 2 的行。我尝试添加行

WHERE op_ats.estadoAT = 1 OR op_ats.estadoAT = 2

但这会产生以下结果:

| ID2 | num_chave | numAT | estadoAT |
|  1  |  A        | 444   |   3      |
|  3  |  C        | 111   |   1      |
|  4  |  D        | 333   |   2      |

正在恢复... 我的目的是获取 Table2 中的所有行并加入具有 'id_cofre = 1' 和“(estadoAT = 1 OR estadoAT = 2)”的 Table1 行。 感谢任何帮助。

您必须将条件移动到 JOIN 子句而不是 WHERE。

SELECT chaves.*, ats.numero numAT, ats.estadoAT
FROM op_ats_cofres_chaves chaves
LEFT JOIN op_ats ats ON ats.id_chave_cofre = chaves.id AND ats.id_cofre = 1
AND op_ats.estadoAT = 1 OR op_ats.estadoAT = 2;