我有以下结构的表:
表格1
| ID1 | NAME | GROUP_ID |
-------------------------
| 1 | AAA | 101 |
| 2 | A_A | 101 |
| 3 | BBB | 0 |
| 4 | CCC | 103 |
| 5 | C_C | 103 |
| 6 | DDD | 0 |
| 7 | EEE | 0 |
| 8 | FFF | 0 |
| 9 | GGG | 0 |
| 10| HHH | 104 |
| 11| H_H | 104 |
表2
| ID2 | NAME |
--------------
| 1 | AAA |
| 2 | BBB |
| 3 | C_C |
团体
| GROUP_ID | NAME |
-------------------
| 101 | AAA |
| 101 | A_A |
| 103 | CCC |
| 103 | C_C |
| 104 | HHH |
| 104 | H_H |
‘table1’是一个包含所有元素的表.在此表中,有按条件建立的重复记录,并且此元素已插入表“组”中.在table2处具有与table1中的元素匹配的元素.
我想显示来自table1的所有记录,但不在table2中.如果table2中的元素在表组中,则不要在结果表中显示该组中的所有元素.在这种情况下,元素是AAA / A_A(group_id 101)和CCC/C++_C(group_id 103)
结果表
| ID1 | NAME | GROUP_ID |
-------------------------
| 6 | DDD | 0 |
| 7 | EEE | 0 |
| 8 | FFF | 0 |
| 9 | GGG | 0 |
| 10| HHH | 104 |
| 11| H_H | 104 |
结果表中没有名称为A_A和C_C的元素,因为该项目重复.
我尝试了这个:
http://sqlfiddle.com/#!2/70253/3
解决方法:
此查询将按名称显示table1中不在table2中的所有元素,并且
也将筛选出与表2中存在的组条目具有相同ID的所有条目(在您的情况下为重复项).
select t1.* from table1 t1 left join groups g on t1.name=g.name
left join table2 t2 on t2.name=t1.name
where (g.group_id is null or g.group_id not in (SELECT gg.group_id FROM TABLE2 t2 inner join groups gg on gg.name=t2.name))
and t2.id2 is null;
查看您的sqlFiddle更新.