Mysql 以指定格式从两个表中获取数据
我对数据库不是很在行,所以我在寻找一种有效的方法来解决下面的问题。正如已经解决了它,但使用了许多联合和子查询,但这些似乎并不理想Mysql 以指定格式从两个表中获取数据,mysql,database,Mysql,Database,我对数据库不是很在行,所以我在寻找一种有效的方法来解决下面的问题。正如已经解决了它,但使用了许多联合和子查询,但这些似乎并不理想 INSERT INTO teacher(id, name) VALUES(1, 'Mike'); INSERT INTO teacher(id, name) VALUES(2, 'Jim'); INSERT INTO teacher(id, name) VALUES(3, 'Chris'); INSERT INTO teacher(id, name) VALUES(4
INSERT INTO teacher(id, name) VALUES(1, 'Mike');
INSERT INTO teacher(id, name) VALUES(2, 'Jim');
INSERT INTO teacher(id, name) VALUES(3, 'Chris');
INSERT INTO teacher(id, name) VALUES(4, 'John');
*************************************************************
INSERT INTO subject(id, name, teacherId) VALUES(1, 'DSA', 1);
INSERT INTO subject(id, name, teacherId) VALUES(2, 'OPPS', 2);
INSERT INTO subject(id, name, teacherId) VALUES(3, 'JAVA', 2);
我的预期产出是;
迈克1
吉姆2
克里斯0
约翰0
说明:
1.每位教师的姓名以及相关科目。
2.与每位教师相关的科目编号,即0、1、2等
3.未分配任何科目的教师姓名
任何帮助都将受到真诚的感谢 下面的查询将帮助您
select t.name, count(s.name) from teacher t
left join subject s on s.teacherId = t.id
group by t.name;
您需要在教师id上连接两个表
然后数一数受试者的名字
用于从教师
表中获取数据,即使主题
表中没有数据
用于聚合每个教师的
科目名称
这是一种有效的方法,无需使用任何联接。我曾经用这种方式查询以避免左连接
SELECT
`name`,
(SELECT COUNT(id)
FROM `subject`
WHERE subject.teacherId = teacher.id) 'count'
FROM teacher;
你可以使用union all
select t.name ,count(s.*) as nbr from teacher t,subject s where t.id=s.teacherId
group by t.name
union all
select t.name ,0 as nbr from teacher t where id not in ( select teacherId from subject)
使用左联接和分组方式计数