Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 以指定格式从两个表中获取数据_Mysql_Database - Fatal编程技术网

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)

使用左联接和分组方式计数