【问题标题】:MySQL: Show specific records from table?MySQL:显示表中的特定记录?
【发布时间】:2012-10-24 13:41:06
【问题描述】:

我有以下结构的表:

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 |

群组

| 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 的元素不在 RESULT TABLE 中,因为这些项目是重复的。

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

【问题讨论】:

    标签: mysql sql select duplicates


    【解决方案1】:

    此查询将按名称显示table1 中不在table2 中的所有元素,并且 还将过滤掉与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 更新。

    【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 2013-01-27
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      相关资源
      最近更新 更多