首页 文章

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

提问于
浏览
3

我有以下结构的表:

table1

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

table2

| ID2 | NAME |
--------------
|   1 |  AAA |
|   2 |  BBB |
|   3 |  C_C |

groups

| 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)

RESULT TABLE

| 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 回答

  • 2

    此查询将按名称显示 table1 中不在 table2 中的所有元素,并且还将筛选出与 table2 中存在的 group 条目具有相同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已更新 .

  • 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

相关问题