2015-10-31 32 views
0

我想从不同表中删除并添加两列。从不同表中删除并添加两列

桌上的书:

BookID | BookName | Author | Edition | PublishingYear | copies| Shelf | Row 
    1 | SQL | Robert | 3 |  2005  | 3  | A |third 

表问题:(在此我已创建了tblPerson加入以显示PERSONNAME而非是PersonID)

BookID | BookName | DateIssue | ReturnDate | PersonName | copies 
    1 | SQL  | 2015-10-12 | 2015-10-12 |  john | 1 

表返回:

BookID | BookName | DateIssue | ReturnDate | PersonName | copies 
    1 | SQL  | 2015-10-12 | 2015-10-12 |  john | 1 

Sql查询:

Select (tblBook.copies) - (tblIssue.copies) 
FROm tblBook 
FULL join tblIssue 
ON tblBook.copies = tblIssue.copies 

此查询不会将这两列(副本)列出。 我想在发行本书时减去来自tblbook列副本(原始值)的列(副本)tblIssue。 当我从tbl Return返回书籍时,它给了我tblBook中列(副本)的原始值。

+0

看来你需要加入上的BookID,而不是 –

+0

'选择(tblBook.copies)打印份数 - (tblIssue.copies) 从tblBook FULL加入tblIssue ON tblBook.BookID = tblIssue.BookID' –

+0

的BookID | BookName | DateIssue | ReturnDate | PersonName |复制1 | SQL | 2015-10-12 | 2015-10-12 |约翰| 1 – Warda

回答

1

当您在进行连接时,您需要将它们绑定到表上的表上的表连接起来。

将副本上的两个表连接在一起并不合乎逻辑,所以将其加入主键外键引用BookID。

Select (tblBook.copies) - (tblIssue.copies) 
FROm tblBook 
FULL join tblIssue 
ON tblBook.BookId = tblIssue.BookId 

这将产生以下结果,如果没有否定的话。

BookID | BookName | Author | Edition | PublishingYear | copies| Shelf | Row | BookID | BookName | DateIssue | ReturnDate | PersonName | copies 
    1 | SQL | Robert | 3 |  2005  | 3  | A |third| 1 | SQL  | 2015-10-12 | 2015-10-12 |  john | 1 

由此减去3-1这应该等于2。但重要的是要考虑连接结果应该是什么,然后规划出连接策略。

EDIT 1

的多少书是在给定的时间availeble示例查询

Select tblBook.BookId, MAX(tblBook.copies) - SUM(tblIssue.copies) as countOfAvailebleBooks 
FROm tblBook 
FULL join tblIssue 
ON tblBook.BookId = tblIssue.BookId 
WHERE tblIssue.ReturnDate >= '2015-10-12'AND tblIssue.IssueDate <= '2015-10-12' 

这将产生一个集合结果对于给定的日期,该日期是2015年10月12日为在这种情况下,你有多少本书可供使用,这不是最优的,但你给了什么,它似乎是最好的解决方案。

+0

其实这可以是真实的,如果有是一对一的关系。否则你将需要一些分组和总结副本等。但由于OP没有提供任何细节,所以此时此时是正确的。 –

+0

您的查询仅显示副本栏。我想要在副本列 – Warda

+0

中加入Person Name和subraction来显示BookID | BookName | DateIssue | ReturnDate | PersonName |副本 1 | SQL | 2015-10-12 | 2015-10-12 |约翰| 1 – Warda