不使用GROUPBY重写MySQL查询

不使用GROUPBY重写MySQL查询,mysql,sql,Mysql,Sql,以下是表格信息: 表名为 +-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | ID | varchar(5) | NO | PRI | NULL |

以下是表格信息: 表名为

+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| ID        | varchar(5)   | NO   | PRI | NULL    |       |
| course_id | varchar(8)   | NO   | PRI | NULL    |       |
| sec_id    | varchar(8)   | NO   | PRI | NULL    |       |
| semester  | varchar(6)   | NO   | PRI | NULL    |       |
| year      | decimal(4,0) | NO   | PRI | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
要求是找出哪个课程在2009年出现过不止一次id是教师id

以下是我使用分组依据的查询:


如果不使用分组方式,我怎么写这篇文章呢?

对于您的家庭作业,下面的sql可以完成。 这是按照你们的逻辑,id存在不止一次是指课程出现不止一次

select DISTINCT T1.course_id 
from teaches T1
where T1.course_id not in (
select a.course_id 
from teaches as a inner join teaches as b
on a.course_id = b.course_id and a.year = b.year and a.id <> b.id
where a.year= 2009 )

你可以用这样的东西

    select t.course_id
from (select t.*, count(*) as cnt from teaches t where year= 2009 ) t
where cnt > 1
在发布问题之前,尝试使用堆栈溢出进行搜索


下面这样的方法应该可以工作:

select distinct course_id
from teaches o
where (select count(1) from teaches i where i.course_id = o.course_id and i.[year] = 2009) > 1
你可以试试这个:

SELECT DISTINCT
    T.course_id
FROM
    teaches T
WHERE
    T.course_id NOT IN (
        SELECT 
          T1.course_id
        FROM teaches AS T1 INNER JOIN teaches AS T2 ON T1.course_id = T2.course_id
        AND T1.`year` = T2.`year`
        AND T1.id <> T2.id
        WHERE   T1.`year` = 2009
    );
预期产出:


毫无疑问,你为什么需要不使用分组作业的方式来完成作业。。
SELECT DISTINCT
    T.course_id
FROM
    teaches T
WHERE
    T.course_id NOT IN (
        SELECT 
          T1.course_id
        FROM teaches AS T1 INNER JOIN teaches AS T2 ON T1.course_id = T2.course_id
        AND T1.`year` = T2.`year`
        AND T1.id <> T2.id
        WHERE   T1.`year` = 2009
    );
DROP TABLE IF EXISTS `teaches`;
CREATE TABLE `teaches` (
  `ID` varchar(5) CHARACTER SET utf8 DEFAULT NULL,
  `course_id` varchar(8) CHARACTER SET utf8 DEFAULT NULL,
  `sec_id` varchar(8) CHARACTER SET utf8 DEFAULT NULL,
  `semester` varchar(6) CHARACTER SET utf8 DEFAULT NULL,
  `year` decimal(4,0) DEFAULT NULL
);


INSERT INTO `teaches` VALUES ('66', '100', 'B', '11', '2009');
INSERT INTO `teaches` VALUES ('71', '100', 'A', '11', '2009');
INSERT INTO `teaches` VALUES ('64', '102', 'C', '12', '2010');
INSERT INTO `teaches` VALUES ('77', '102', 'B', '22', '2009');
course_id
   102