sql - 选择与联结表中的许多其他ID有关系的记录

标签 sql sqlite

我正在使用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)


这将向我返回所有为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/

相关文章:

sql - 从具有差异的 varchar 列计算年龄

python - 使用 python 和 pymssql 获取一系列行号之间的行

android - 从收件箱中删除短信时出现奇怪的异常

python-3.x - 如何修复 python3 中的 CVE-2019-19646 Sqlite 漏洞

php - SQLite PDO 绑定(bind)不起作用?

sql - 如何使用条件替换冲突(对于SQLite)?

sql - 过去 12 个月和单个月份的列数

mysql - 也许如何从选择中选择

sql - 自动递增表列

android - SQLite在Android中创建具有多个主键的表