我正在使用SQLite 3数据库。
我有2个表,具有多对多关系。结果,我还有一个连接表来保持这种关系。下面是与我所拥有的类似的东西的表示,包括组成数据等。
教师表:
+----+------------+
| ID | Name |
+----+------------+
| 1 | TeacherOne |
| 2 | TeacherTwo |
+----+------------|
学生表:
+----+------------+
| ID | Name |
+----+------------+
| 1 | StudentOne |
| 2 | StudentTwo |
+----+------------+
教师_学生(连接表):
+-----------+-----------+
| TeacherID | StudentID |
+-----------+-----------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
+-----------+-----------+
我想要的是仅选择
TeacherID
,该记录具有与StudentID
链接的记录,该记录与StudentID
均为1,而TeacherID
为2。在这种情况下,我只能得到StudentID
为1。我已经尝试过以下SQL语句:
SELECT t_s.*
FROM Teacher_Student AS t_s
WHERE StudentID IN (1, 2)
这将向我返回所有
最佳答案
如果要选择在每个学生的TeacherID
表中有记录的Teacher_Student
;您可以使用以下查询:
SELECT ts.TeacherID
FROM (
SELECT TeacherID, COUNT(StudentID) AS cnt
FROM teacher_student
GROUP BY TeacherID) ts
JOIN (
SELECT COUNT(*) As sCnt
FROM student) s
ON ts.cnt = s.scnt
SQL Fiddle Demo
您可以使用此查询来选择两个特定的学生:
SELECT ts.TeacherID
FROM (
SELECT TeacherID, COUNT(StudentID) AS cnt
FROM teacher_student
WHERE StudentID IN (1,2)
GROUP BY TeacherID) ts
WHERE cnt = 2
这还将删除与学生有两个联系的老师。
关于sql - 选择与联结表中的许多其他ID有关系的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31565373/