我是社区的新手,我需要你在MySQL的帮助。
我们有3个表格如下:
student_visits_lectures(N:M关系)
student=({id},name,{id})
lectures=({lid},title{lid})
student_visits_lectures=({student,lectures})
查询是什么?:
列出所有访问所有讲座的学生。
例如:
现在我想要所有参观所有讲座的学生。
抱歉我的英文和格式错误。我将来会尽我所能,但这对我来说非常重要。
提前致谢!
问候
答案 0 :(得分:0)
首先将学生的ID和讲座作为外键添加到student_visits_lectures表中。 然后将查询写为:从student_visits_lectures中选择学生,其中sbl.student_id = student.id。
答案 1 :(得分:0)
这是我目前的查询:
SELECT name FROM student INNER JOIN student_visits_lectures ON student.id=student_visits_lectures.id INNER JOIN lectures ON student_visits_lectures.lid= lectures.lid
答案 2 :(得分:0)
我做到了。感谢您的快速回复。
这是解决方案:
我们有3张桌子:
student
id | name
----------
1 | Jack
2 | Rick
lectures
lid | title
----------
1 | Math
2 | English
3 | Sport
student_visiting_lectures
sid |vlid
---------
1 | 1
1 | 2
1 | 3
2 | 2
3 | 3
创建表格并插入值
CREATE TABLE student(
id INT NOT NULL,
name VARCHAR(30),
PRIMARY KEY(id)
)ENGINE= InnoDB;
CREATE TABLE lectures(
lid INT NOT NULL,
title VARCHAR(40),
PRIMARY KEY(lid)
)ENGINE = InnoDB;
CREATE TABLE svl(
sid INT NOT NULL,
vlid INT NOT NULL,
PRIMARY KEY(sid,vlid),
FOREIGN KEY (sid) REFERENCES student(id),
FOREIGN KEY (vlid) REFERENCES lectures(lid)
) ENGINE = InnoDB;
INSERT INTO student VALUES(
1,'Jack'),
(2,'Rick');
INSERT INTO lectures VALUES(
1,'Math'),
(2,'English'),
(3,'Sport');
INSERT INTO svl VALUES(
1,1),
(1,2),
(1,3),
(2,1);
这是查询
SELECT name, title FROM student
INNER JOIN svl ON id = sid
INNER JOIN lectures ON sid = vlid;
答案 3 :(得分:0)
既然你想要所有完成所有讲座的学生,你可以计算出有多少讲座:
SELECT COUNT(*) as n FROM lectures;
然后,根据学生,您可以计算他们所关注的讲座数量:
SELECT student_id, COUNT(*) as n
FROM student_visits_lectures
GROUP BY student_id;
您可以过滤所有讲座的学生:
SELECT s.*
FROM student_visits_lectures AS ls LEFT JOIN student AS s ON s.id=ls.student_id
GROUP BY student_id
HAVING COUNT(DISTINCT lecture_id) = (SELECT COUNT(*) FROM lectures);
请参阅fiddle。
这是我用过的表格:
CREATE TABLE student (
id INT NOT NULL,
name VARCHAR(64),
PRIMARY KEY (id)
);
CREATE TABLE lectures (
id INT NOT NULL,
title VARCHAR(100),
PRIMARY KEY(id)
);
CREATE TABLE student_visits_lectures (
student_id INT NOT NULL,
lecture_id INT NOT NULL
);