内部加入四个表

时间:2014-10-20 17:37:24

标签: sql-server inner-join

我有四张这样的桌子。

      Title Table

TitleName | ISBN

      Engineering BK    |1234556
      Time for a change |1233333 

书籍ISBN不是普通的ISBN类型。

 Copy Table

CopyID | ISBN

    1      | 1234556
    2      | 1233333

 Loan Table

BorrowerID | CopyID | BorrowedDate | ReturnDate

    1        |  1     |  2014-10-20  | NULL
    2        |  2     |  2014-10-18  | NULL
    3        |  3     |  2014-10-11  | 2014-10-20

尚未退回的图书的状态为SAVED为空

借款人表

BorrowerID |借款人名称| BorrowerAddress

   1         | Sam            | Shawl Rd, London
   2         | Ram            | ABC Rd, London

我将选择一个标题以及该标题的所有借用副本以及每个副本的借款人详细信息。

                                                                                          SELECT T.ISBN,T.TitleName,CP.Copy_ID,LN.BorrowerID, BR.BorrowerName,BR.BorrowerAddress FROM  Title T 
                  INNER JOIN Copy CP ON T.ISBN=CP.ISBN
                  INNER JOIN Loan LN ON CP.CopyID=LN.CopyID
                  INNER JOIN Borrower BR 
                  ON LN.BorrowerID=BR.BorrowerID WHERE LN.ReturnDate=NULL 
                  AND T. TitleName='Time For a change';

但这并没有结果。我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

将此更改为

INNER JOIN Borrower BR ON LN.BorrowerID=BR.BorrowerID WHERE LN.ReturnDate=NULL

INNER JOIN Borrower BR ON LN.BorrowerID=BR.BorrowerID WHERE LN.ReturnDate IS NULL

答案 1 :(得分:0)

因为它是一个内连接并且为了使它工作,你必须在tabled中都有一个值来获取行,你试图选择的那个标题在Copy表中没有值。首先阅读内连接以及sql连接如何工作

首先阅读此链接,您将了解sql joins

答案 2 :(得分:0)

改变这个:

          ON LN.BorrowerID=BR.BorrowerID WHERE LN.ReturnDate=NULL

到此:

          ON LN.BorrowerID=BR.BorrowerID WHERE LN.ReturnDate is NULL 

NULL是一个特殊占位符,通常表示未知值。因此,当您尝试处理=值时,使用NULL赢得的内容的正常比较适用。相反,您可以使用IS NULL来回避它。

请记住,NULLABLE的数据字段确实有一些额外的存储字节。根据您是否关心这一点,您还可以选择使用DEFAULT值而不是NULL。