2015-12-02 72 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字段。

相关问题