当前位置: 首页 > 知识库问答 >
问题:

要从Table_A获取记录,仅当Table_B中存在的所有关联记录都符合特定条件时

高运诚
2023-03-14

对于Ex:有两个表:

  1. 表1-教师,
  2. 表2-学生

在教师表中,包含教师的详细信息

Teacher_Id  &thinsp;    Teacher_Name<br/>
1   &emsp; &emsp;  &emsp; &emsp;    Akshay<br/>
2   &emsp; &emsp; &emsp;  &emsp;    Rohan<br/>
3   &emsp; &emsp;  &emsp; &emsp;    Suresh<br/>
4   &emsp;  &emsp; &emsp;  &emsp;   Naresh<br/>

在学生表中,它包含学生的详细信息

Student_Id &thinsp; Student_Name&thinsp;    Teacher_Id&thinsp;  Marks<br/>
1&emsp; &emsp;  &emsp; &emsp;   Abhi&emsp; &emsp;  &emsp; &emsp;    1&emsp; &emsp;  &emsp; &emsp;   50<br/>
2&emsp; &emsp;  &emsp; &emsp;   Kumar&thinsp; &emsp;  &emsp; &emsp; 2&emsp; &emsp;  &emsp; &emsp;   28<br/>
3&emsp; &emsp;  &emsp; &emsp;   Rahul&thinsp; &emsp;  &emsp; &emsp; 2&emsp; &emsp;  &emsp; &emsp;   90<br/>
4&emsp; &emsp;  &emsp; &emsp;   Mohan&thinsp; &emsp;  &emsp; &emsp; 4&emsp; &emsp;  &emsp; &emsp;   39<br/>
5&emsp; &emsp;  &emsp; &emsp;   Anil&emsp; &emsp;  &emsp; &emsp;    3&emsp; &emsp;  &emsp; &emsp;   51<br/>
6&emsp; &emsp;  &emsp; &emsp;   Jack&emsp; &emsp;  &emsp; &emsp;    4&emsp; &emsp;  &emsp; &emsp;   38<br/>
7&emsp; &emsp;  &emsp; &emsp;   Daniel&ensp; &emsp;  &emsp; &emsp;  2&emsp; &emsp;  &emsp; &emsp;   78<br/>
8&emsp; &emsp;  &emsp; &emsp;   Arun&emsp; &emsp;  &emsp; &emsp;    3&emsp; &emsp;  &emsp; &emsp;   66<br/>
9&emsp; &emsp;  &emsp; &emsp;   Mark&emsp; &emsp;  &emsp; &emsp;    1&emsp; &emsp;  &emsp; &emsp;   43<br/>
10&ensp; &emsp;  &emsp; &emsp;  Mukesh&ensp; &emsp;  &emsp; &emsp;  4&emsp; &emsp;  &emsp; &emsp;   99<br/>

如你所见,一个老师与多个学生联系在一起。我想选择那些所有学生都通过考试的老师(及格分数为40)。例如:Teacher_Id=2的老师与3个学生分别获得28、90、78分。这里是28分的学生考试不及格。所以,我们不会选择那个老师。我们不会选择那些即使有一个学生得分低于40分的老师。我们必须选择那些所有学生得分超过40分的老师。

共有1个答案

姜鹏程
2023-03-14

我们可以在这里使用条件聚合:

SELECT
    t.Teacher_Name,
    t.Teacher_Id
FROM Teacher t
INNER JOIN Student s
    ON t.Teacher_Id = s.Teacher_Id
GROUP BY
    t.Teacher_Name,
    t.Teacher_Id
HAVING
    COUNT(CASE WHEN s.Marks < 40 THEN 1 END) = 0;

另一个选项使用<code>EXISTS</code>:

SELECT
    t.Teacher_Name,
    t.Teacher_Id
FROM Teacher t
WHERE NOT EXISTS (SELECT 1 FROM Student s
                  WHERE t.Teacher_Id = s.Teacher_Id AND s.Marks < 40);
 类似资料:
  • 问题内容: 我有以下数据: 对于每组记录(按ParentID分组),我想查找所有没有包含“ A”作为数据值的记录的组。 由于第1组和第6组确实包含至少一个以“ A”作为数据值的记录,因此我不希望看到它们。我只想查看记录4和5(它们是组4的一部分),因为该组中没有记录带有“ A”。 任何帮助是极大的赞赏! 问题答案: 如果表很大,建议建立索引。

  • 我需要国家列表,其中没有城市或地方,这意味着所有的城市或地方的国家是空的或空的。不要国家,如果国家的一个记录有城市或地方价值。

  • 首先,我知道这个查询有点混乱,但它可以正常工作,直到至少有一条记录存在,并且设置为true,此时没有返回任何记录。如果有另一条记录的设置为false或两者的组合,则它可以正常工作,即返回的记录的所有票证总数都设置为0或适当的值。 我已将查询更新为,并将票证表联接更改为left(也尝试了full outer),但它仍然存在上述问题。 为什么会发生这种情况,我能做些什么来防止它?

  • 我正在寻找一种方法,以获得所有的DNS记录的网址<有没有一种方法可以在没有任何库的情况下使用C#实现这一点?

  • 问题内容: 我有一张下表 我想选择所有item_id,其中表中具有该item_id的每条记录的状态均为A。 例如,如果记录是这样的: 那么我唯一会回来的item_id是2。 问题答案:

  • 问题内容: 我有一个包含ID,WorkerID,IsActive标志(1或0)和LocalTime的表。每次工作人员处于活动状态或不活动状态时,都会使用WorkerID,1或0标志记录以及一个时间(LocalTime)创建一条记录。 我想插入一个新表中:从该表中,对于每个唯一的WorkerID,仅当该记录的IsActive标志为1时,才为该唯一的WorkerID选择具有最新LocalTime的记录