MySQL:显示表中的特定记录?

我有以下结构的表:

表格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更新.

上一篇:python-如何在大熊猫中以组为单位在单列中删除重复数据?


下一篇:python-drop_duplicates在熊猫中不起作用?