比方说,我有一个schools
表和students
表。 students
表连接到schools
表并具有列NAME
和BIRTHDATE
。学生在学校查询
我需要的所有学校有学生在他们里面,谁被称为“吉姆”或“迈克”和出生在同一天。
喜欢的东西:
select *
from schools s
join student st in st.schoolId = s.Id
where (...)
比方说,我有一个schools
表和students
表。 students
表连接到schools
表并具有列NAME
和BIRTHDATE
。学生在学校查询
我需要的所有学校有学生在他们里面,谁被称为“吉姆”或“迈克”和出生在同一天。
喜欢的东西:
select *
from schools s
join student st in st.schoolId = s.Id
where (...)
可以用拖时间的表相关的生日内穰
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
你可以简单的使用条件聚集找到schoolId
S作,以每birthdate
和join
的名称(或使用IN
)与学校的表来获得相关细节。
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;
你会寻找:
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
你可以做到这一点通过与学校学生参加两次
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'
这种尝试:
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
)
希望这个帮助!
另一种形式(我没有测试过)可能是:
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
显示我们的DB模式,样本数据和预期产出。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是一个伟大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)来了解如何提高您的问题质量并获得更好的答案。 –
你不能用同一个WHERE条款比较同一个表中的不同行,你需要让学生加入学生,或者使用'HAVING'子句。 –
我明白你的意思。你可以向我展示那个解决方案的例子 –