左连接2个表不起作用

时间:2016-07-17 19:08:42

标签: left-join

我有两张桌子:

表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

表_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   |

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

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行。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您必须将条件移动到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;