2012-05-24 60 views
1

我想創建一個查詢,返回一個父母和它的監護人使用後續表。我的問題是,如何在person表中使用name屬性兩次以返回護理人員的姓名和父母的姓名。任何示例代碼將不勝感激謝謝。我知道我沒有解釋得很好,但如果有人明白我的意思,可以隨意編輯上述內容。更具體地說,我只想使用人員表來存儲父母及其子女的信息,並使用顯示每個相關人員的姓名。我怎樣才能用一張桌子做到這一點。使用相同的表和屬性來返回不同類型的人

enter image description here

使用提供了一些建議,我能夠創建查詢,但由於我的表有問題這是行不通的。我正在使用以下表格:

CREATE TABLE Person 
(
personID INT NOT NULL, 
name VARCHAR(50), 
address VARCHAR(70), 
phone VARCHAR(15), 
email VARCHAR(30), 
year INT, 
PRIMARY KEY (personID) 
); 

CREATE TABLE Guardian 
(
parentID INT NOT NULL, 
childID INT NOT NULL, 
PRIMARY KEY (parentID, childID) 
FOREIGN KEY (parentID) REFERENCES (personID), 
FOREIGN KEY (childID) REFERENCES (personID) 
); 

我應該使用哪些語句,以便使其正常工作。我認爲問題在於,外鍵聲明都是指人表中的同一個鍵。如何在查找父級和子級時不引起任何錯誤而引用相同的屬性。

+0

你要尋找的是[SQL別名](http://www.w3schools.com/sql/sql_ alias.asp) – mgibsonbr

+0

@mgibsonbr:是的,我已經閱讀了關於別名的W3學校的一些內容,但我無法看到它們在這種情況下如何使用。例子? – batsta13

+1

小心使用w3schools。他們不是權威組織,他們頁面上的一些信息是不正確的或誤導性的。 http://en.wikipedia.org/wiki/W3Schools#Criticism –

回答

3

您可以連接一個表兩次,但必須使用不同的表別名。

試試這個:

SELECT 
    Child.name, 
    Parent.name 
FROM Person AS Child 
JOIN Guardian 
ON Child.personID = Guardian.child 
JOIN Person AS Parent 
ON Parent.personID = Guardian.parent 
+0

我有一個錯誤。我發佈了更多有關問題的信息。你能提供補救嗎?謝謝。 – batsta13

0

我不明白什麼ü在尋找什麼,反正試試這個:

選擇p.name,從人員P p.name其中p。 PERSONID在(選擇監護人 不同的parentid)

相關問題