我有四张这样的桌子。
Title Table
Engineering BK |1234556
Time for a change |1233333
书籍ISBN不是普通的ISBN类型。
Copy Table
1 | 1234556
2 | 1233333
Loan Table
1 | 1 | 2014-10-20 | NULL
2 | 2 | 2014-10-18 | NULL
3 | 3 | 2014-10-11 | 2014-10-20
尚未退回的图书的状态为SAVED为空
借款人表
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';
但这并没有结果。我在这里做错了什么?
答案 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。