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

时间:2012-11-04 15:28:27

标签: mysql sql select duplicates

我有以下结构的表:

表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'是包含所有元素的表。在此表中,具有由条件创建的重复记录,并且此元素插入表'groups'中。在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的元素不在RESULT TABLE中,因为这些项目是重复的。

我试过这个: http://sqlfiddle.com/#!2/70253/3

2 个答案:

答案 0 :(得分:2)

怎么样:

对于已使用的群组:

select * from table1
where NAME not in (SELECT distinct(name) FROM TABLE2)

对于所有群体,不论用途如何:

select * from table1
where NAME not in (SELECT distinct(name) FROM groups)

http://sqlfiddle.com/#!2/83b7c/45

答案 1 :(得分:2)

此查询将按名称显示table1table2以外的所有元素 也将过滤掉group中存在的与table2条目具有相同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已更新。