我有两张桌子:
表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行。 任何帮助表示赞赏。
答案 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;