2015-12-02 45 views
0

我想從一個表中選擇兩個字段。從一個表中選擇兩個字段

SELECT Book.Id, 
    Book.fristTitle, 
    Book.secondTitle, 
    Person.fName +' ' + Person.lName as author, 
    (Person.fName +' ' + Person.lName) as translator, 
    Subject.subjectTitle, 
    isbn, 
    editionNumber, 
    state, 
    type 
FROM Book 
INNER JOIN Subject ON Book.subjectId=Subject.Id 
INNER JOIN Person ON Book.authorId=Person.Id 
    where Person.isAuthor=1 
INNER JOIN Person ON Book.authorId=Person.Id 
    where Person.isTranslator=1 

其中第一場是(Person.fName +' ' + Person.lName)作爲作者和第二場是(Person.fName +' ' + Person.lName)在圖書館數據庫翻譯

+0

我搞不​​清楚「filde」是什麼意思。它是「行」嗎? – ChrisF

+1

我假設他的意思是字段>欄。 –

回答

0

這應該工作:

string query = SELECT Book.Id, Book.fristTitle, Book.secondTitle, 
         A.fName +' ' + A.lName as author, 
         (T.fName +' ' + T.lName) as translator, 
         Subject.subjectTitle, isbn, editionNumber, state, type 
       FROM Book 
       INNER JOIN Subject ON Book.subjectId=Subject.Id 
       INNER JOIN Person as A ON Book.authorId = A.Id and A.isAuthor=1 
       INNER JOIN Person as T ON Book.authorId = T.Id and T.isTranslator=1 

你需要加入到人的兩倍,但它的別名每次來區分這組數據是哪個。

您不能有兩個WHERE子句(我在複製代碼時最初重複的一個錯誤),因此您使用AND來控制連接。

0

當我想你可能仍然失去了一些東西,你的查詢應該看起來更像是這樣的:

SELECT Book.Id, Book.fristTitle,Book.secondTitle, 
     P1.fName +' ' + P1.lName as author, 
     P2.fName +' ' + P2.lName as translator, 
     Subject.subjectTitle,isbn,editionNumber,state,type 
FROM Book 
    INNER JOIN Subject ON Book.subjectId=Subject.Id 
    INNER JOIN Person P1 ON Book.authorId=P1.Id AND P1.isAuthor=1 
    INNER JOIN Person P2 ON Book.authorId=P2.Id AND P2.isTranslator=1 

一般用這種方法雖然,你Book表將有2場 - 一個用於author,一個用於translator ...


BTW - 通過這種方法,你必須有一個具有相同IdPerson表多行(1 IsAuthor = 1和1 isTranslator = 1)。如果是這種情況,我強烈建議查看數據庫規範化。

更好的方法是在book表上有一個authorid字段和一個translatorid字段。

相關問題