【问题标题】:Show only exactly unique results in MySQL在 MySQL 中仅显示完全唯一的结果
【发布时间】:2016-07-10 00:35:47
【问题描述】:

我需要帮助才能获得独一无二的结果。这意味着如果记录已经存在,那么我根本不希望它显示在结果中。我正在使用 MySQL 和 MySQL Workbench。

给定表格

部分

Course_id   Sec_id  Semester    Year
1234           1    Spring      2010
3456           2    Spring      2010
5678           1    Spring      2010
7890           1    Spring      2010
9012           1    Spring      2010

课程

Course_id   Name
1234        English
3456        English
5678        Math
7890        Science
9012        Music

我尝试了以下解决方案,但结果显示为英语,我想完全消除英语,因为它提供了两次。

SELECT 
    s.course_id, c.name, s.year
FROM
    section as s, course as c
WHERE
    s.course_id = c.course_id AND s.year = 2010 AND s.sec_id = 1

我从上述查询中得到的结果。

Course_id   Name    Year
1234        English 2010
5678        Math    2010
7890        Science 2010
9012        Music   2010

我想要的结果

Course_id   Name    Year
5678        Math    2010
7890        Science 2010
9012        Music   2010

【问题讨论】:

  • SELECT MAX(s.course_id), c.name,MAX( s.year) FROM section as s, course as c WHERE s.course_id = c.course_id GROUP BY c.name HAVING COUNT(DISTINCT c.name)=1
  • @Mihai 为什么要计算 DISTINCT? OP 不想要重复的条目。您的条件也将包括English。请解释我是否弄错了问题..

标签: mysql database mysql-workbench


【解决方案1】:

您只需对结果进行分组,然后只选择包含 1 行的组:

SELECT 
    s.course_id, c.name, s.year
FROM
    section as s, course as c
GROUP BY
    c.name
HAVING 
    count(c.name) = 1
WHERE
    s.course_id = c.course_id AND s.year = 2010 AND s.sec_id = 1

【讨论】:

    【解决方案2】:

    要获取不重复的课程 ID,您可以使用以下查询:

    SELECT Course_id
    FROM course 
    GROUP BY Course_id
    HAVING COUNT(*) = 1
    

    使用上面的查询作为派生表,可以通过INNER JOIN操作过滤掉重复的课程:

    SELECT 
        s.course_id, c.name, s.year
    FROM
        section as s
    JOIN (
        SELECT Course_id
        FROM course 
        GROUP BY Course_id
        HAVING COUNT(*) = 1
    ) as d ON s.course_id = d.course_id
    JOIN 
        course as c ON d.course_id = c.d.course_id
    WHERE
        s.year = 2010 AND s.sec_id = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2012-04-03
      • 1970-01-01
      相关资源
      最近更新 更多