学生在校内查询

时间:2017-03-21 15:43:28

标签: sql sql-server

假设我有一个schools表和一个students表。 students表已连接到schools表,其列为NAMEBIRTHDATE

我需要所有学校,其中包含学生,他们被称为“ jim ”或“ mike “并且在同一天出生。

类似的东西:

select *
  from schools s
  join student st in st.schoolId = s.Id
  where (...)

6 个答案:

答案 0 :(得分:2)

你可以通过两次加入学生来实现这一目标

select  distinct s.*
from    schools s
join    student st1
on      st.schoolId = s.Id
join    student st2
on      st.schoolId = s.Id
where   st1.birthdate = st2.birthdate and
        st1.name = 'Jim' and
        st2.name = 'Mike'

答案 1 :(得分:1)

您可以简单地使用条件聚合来查找schoolIdbirthdate,其中joinIN(或使用select s.* from schools s join ( select distinct schoodId from student where name in ('jim', 'mike') group by schoodId, birthdate having count(distinct name) = 2 ) st on s.Id = st.schoodId; )的名称与学校表一起获取相关细节。

    private static int clickCount;
    private static object _sender;

    private void Button_Clicked(object sender, EventArgs e)
    {
        if (clickCount < 1)
        {
            TimeSpan tt = new TimeSpan(0, 0, 0, 0, 250);
            _sender = sender;
            Device.StartTimer(tt, ClickHandle);
        }
        clickCount++;
    }

    bool ClickHandle()
    {
        if (clickCount > 1)
        {
            Minus1(_sender);
        }
        else
        {
            Plus1(_sender);
        }
        clickCount = 0;
        _sender = null;
        return false;
    }

答案 2 :(得分:1)

你一直在寻找:

select s.*
from schools s
    cross apply (select birthdate, name from students st where st.schoolId = s.Id and st.name = 'Jim') studentJim
    cross apply (select birthdate, name from students st where st.schoolId = s.Id and st.name = 'Mike') studentMike
where studentJim.birthDate = studentMike.birthDate

答案 3 :(得分:1)

可以通过生日使用表格相关内部的joi

select t1.id from ( 
    select s.id , st.name, st.birthdate
    from schools s
    join student st in st.schoolId = s.Id
    where st.name  = 'jim' 
) t1 
inner join ( 
    select s.id , st.name, st.birthdate
    from schools s
    join student st in st.schoolId = s.Id
    where st.name  = 'mike' 
) t2 on t1.birthdate = t2.birthdate

答案 4 :(得分:0)

试试这个:

select * from schools
where schools.id IN (

(select 
    s1.schoolID
from 
   student s1 inner join student s2
   on 
      (s1.schoolID = s2.schoolID) --seem school
      AND (s1.birthdate = s2.birthdate) --seem birthdate
      AND ((s1.name like '% jim %') OR (s1.name like '% mike %'))) --name jim or mike
)
希望这有帮助!

答案 5 :(得分:0)

另一种形式(我没有测试过)可能是:

SELECT * 
 FROM SCHOOLS S
 INNER JOIN (
             SELECT A.SCHOOL_ID 
             FROM STUDENT A
             INNER JOIN STUDENT B ON A.BIRTHDATE = B.BIRTHDATE  AND A.SCHOOL_ID= B.SCHOOL_ID
             WHERE A.NAME = 'JIM'
             AND B.NAME = 'MIKE'
            ) C ON S.ID = C.SCHOOL_ID