以指定格式从两个表中获取数据

txu3uszq  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(298)

我不太擅长数据库,因此寻求一种有效的方法来解决以下问题。正如已经解决了它,但使用了许多联合和子查询,但这些似乎并不理想。

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。未分配到任何科目的教师的姓名。
任何帮助都将不胜感激。

6bc51xsx

6bc51xsx1#

下面的查询将帮助您

select t.name, count(s.name) from teacher t
left join subject s on s.teacherId = t.id
group by t.name;

你需要把教师id上的两个表连起来,然后数一数科目的名称。
使用左连接,以便从 teacher 表中没有数据 subject table
group by用于聚合 subject name 在每个老师身上

wqnecbli

wqnecbli2#

你可以使用联合所有

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)
gzszwxb4

gzszwxb43#

这是一种不使用任何连接的有效方法。我曾经用这种方式查询以避免左连接。

SELECT
  `name`,
  (SELECT COUNT(id)
   FROM `subject`
   WHERE subject.teacherId = teacher.id)    'count'
FROM teacher;

相关问题