2017-03-21 17 views
2

私はschoolsテーブルとstudentsテーブルを持っているとしましょう。 studentsテーブルはschoolsテーブルに接続されており、カラムはNAMEおよびBIRTHDATEです。学校内の学生の質問

私は「ジム」または「マイク」と呼ばれ、同じ日に生まれている学生それらの内部を、持っているすべての学校を必要としています。あなたは、単にbirthdatejoinあたり名の両方を持っているschoolId Sを見つける(またはINを使用)関連する詳細情報を取得するために学校のテーブルで条件付き集約を使用することができます

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

私たちのDBスキーマ、サンプルデータを表示し、期待される出力。 \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 –

+0

同じテーブル内の異なる行を 'WHERE'節と比較することはできません。生徒を生徒に参加させるか、' HAVING'節を使用する必要があります。 –

+0

私はあなたを得ることができます。 –

答えて

1

は、もう一つの形態は、(私はそれをテストしていない)可能性があり生年月日

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 
1

:よう

何か。

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; 
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 
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' 
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 
) 

希望この助け!

0

によってテーブルが関連する内部JOIを牽引時間を使用していません:

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 
関連する問題