2016-10-24 36 views
0

我有以下表格:如何根據外鍵字段執行SQL查詢?

人:

id, name 

父:

id, people_id, name 

我曾嘗試以下:

SELECT * FROM people 
    LEFT JOIN parent ON people.id = parent.people_id 
    WHERE parent.name != 'Carol'; 

我如何找到父母姓名不是Carol的所有人?

+0

你嘗試過什麼嗎? –

+0

請指定您正在使用的RDBMS – Laxmi

+0

如何將孩子與父母聯繫起來? –

回答

4

你可以試試下面的代碼

select people.name from people 
inner join parent on people.id=parent.people_id 
where parent.name not in ('Carol') 
+0

謝謝。一個問題。如果我使用LEFT JOIN而不是INNER JOIN將會發生什麼? – MiniGunnR

+0

如果你使用左連接,那麼結果也將是相同的 –

+0

,如果你認爲任何人存在沒有父母,那麼左連接是更好的選擇,但如果所有人都有父母,那麼內連接和左連接將提供相同的結果 –

0

如果兩個表是通過使用外鍵進行查詢。

  1. 如果你想從一個表在第二表中的一些相關的條目,則用心靈距離人民內部聯接

    選擇* JOIN父ON people.id = parent.people_id 所有記錄'Carol'<>'Carol'

  2. 同樣,LEFT JOIN將從LEFT鏈接表中獲取所有記錄,但是如果從RIGHT表中選擇了某些列,如果沒有相關記錄,則這些列將包含NULL

0

首先,你爲什麼需要兩張表?爲什麼你不能有一個名爲「Person」的帶有ID,Name,ParentID列的表

其中ParentID將是可選的,並且如果它具有父親,則引用該ID。

,並運行下面的查詢

select * from PERSON where Name not like 'Carol%' and ParentID IS NOT NULL; 
0

SELECT * FROM人WHERE EXISTS(SELECT 1 FROM父WHERE people_id = ID和名稱<> '卡羅爾')

0

所有的表結構首先你限制了未來的增長。就像將來如果你想添加父母的父母,那麼它不會在這個表格結構中工作。 你可以像這樣: ID | parent_id | people_name

在這裏,您可以爲parent添加parent_id null,併爲擁有父級的用戶添加parent_id作爲id。這裏找回你必須使用自連接(在同一個表連接)INNER之間

0

`

Select * from people P 
INNER JOIN parent PA ON PA.people_id = P._id 
where PA.name not in ('Carol') 

`

差異JOIN和LEFT OUTER JOIN 是 1)INNER JOIN只攜帶兩個表 之間的相似數據,如果在人們的表parent_id中是空的,那麼它不會丟棄整個行,但是在LEFT OUTER JOIN的情況下,它將帶來來自LEFT表的所有行以及來自右表的相關表。在右側連接的行中全部爲空...