2013-07-02 102 views
0

我对如何为这种情况制作sql语句感到困惑。我一直在尝试,但没有运气,所以希望能有所帮助。我有3个表:表父母,表儿童和表SCHOOL如何为这种情况编写sql

-PARENTS has 
ID  name 


-Children has 
ID parentID nam 

-SCHOOL has 

ID parentID chidrenID schoolType 

我要的是与子女返回所有的父母(他们在学校是否录取与否),但如果他们在学校就读,然后我需要的schoolType是 “高中”

所以沿着这些线路(pseaduo代码)的东西:

Select * from parents,children 
where parents.ID = Children.parentID and 
include school information 
where parents.ID = school.parentID and 
children.ID = school.childrenID and schoolType = "HighSchool" 

任何帮助???

+1

作为一个侧面说明,'不需要SCHOOL.parentID' - 信息可以(和潜在应该)从'儿童的。 parentID'。除此之外....看看布尔条件 - 你将需要一个“OR”(围绕'AND'条件的括号会使逻辑更加明显)。并且,请学会明确限定你的连接,隐式语法(逗号分隔的'FROM'子句)只会让一些未来的查询更难。 –

+0

你到目前为止在SQL中尝试过哪些实现你的伪代码?这看起来像一个非常简单的'JOIN'操作集合,以及'schoolType'上的'WHERE'条件。 –

回答

0

我想你需要一些这样的:

SELECT * from PARENTS P 
     inner join CHILDREN C 
      on P.ID=C.parentID 
     left join SCHOOL S 
      on P.ID=S.parentID 
      and C.ID=S.childrenID 
WHERE S.schoolType is null 
    OR S.schoolType = 'HighSchool' 
+0

我不想使用null作为值,因为我可以根本就没有在学校的行,因为我仍然想显示孩子和父母。另外我是“内心深处”的havig问题。我正在使用sql lite – Snake

+0

Nerver的头脑,它的工作。我有一个愚蠢的拼写错误。感谢你的回答 – Snake

0
SELECT 
    * 
FROM PARENTS p 
INNER JOIN CHILDREN c ON p.ID = c.parentID 
LEFT JOIN SCHOOL s ON c.ID = s.childrenID AND 'HighSchool' = s.schoolType 
+0

由于某种原因,它无法正常工作。 INNER附近发生错误。 sql lite是否有所不同?因为我正在使用sqlite – Snake

+0

也许它是不同的,不确定,因为我没有使用sql lite。似乎你有上面的答案:) – elzaer