2013-07-02 154 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