MYSQL - 查找表a中的行包含表B中的所有列值

时间:2017-07-22 10:19:06

标签: mysql

我是社区的新手,我需要你在MySQL的帮助。

我们有3个表格如下:

  • 学生
  • 讲座
  • student_visits_lectures(N:M关系)

    student=({id},name,{id})
    lectures=({lid},title{lid})
    student_visits_lectures=({student,lectures})
    

查询是什么?:

列出所有访问所有讲座的学生。

例如:

  • 我们有学生
  • 我们有3个讲座(数学,英语,运动)

现在我想要所有参观所有讲座的学生。

抱歉我的英文和格式错误。我将来会尽我所能,但这对我来说非常重要。

提前致谢!

问候

4 个答案:

答案 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
);