我的数据库有很多表,它们之间有很多关系。但是这个问题特别涉及到三个表。
我的图书馆中有"CATALOGUE"
表下的书籍,还有成员(多对多关系)作为另一个表"RESERVATIONS"
保留的书,还有借来的书(多对多关系)作为另一个表"BORROWED_BOOKS"
。
基本上,我必须输出有关当前正在预订的书的所有详细信息(这意味着我需要从LIBRARY_BOOKS中提取数据)以及已预订的成员(从LIBRARY_MEMBERS中获得数据),我还需要列出是否这本书目前是否可以借出。
这是我遇到的最后一个标准。我知道要确定当前是否正在借用保留书,我必须将其与BORROWED_BOOKS
表进行比较,但是我不知道如何进行实际输出。
这是我不完整的代码:
SELECT
M.Member_ID,
M.Name_U,
R.Book_ID,
C.ISBN,
C.Title,
C.Description_B,
R.Reservation_date
SOMETHING AS 'Loan Status'
FROM
dbo.Reservations R
INNER JOIN
dbo.Library_Members M ON R.Member_ID = M.Member_ID
INNER JOIN
dbo.[Library_Books] B ON R.Book_ID = B.Book_ID
INNER JOIN
dbo.Catalogue C ON C.ISBN = B.ISBN
ORDER BY M.Member_ID ASC
我需要帮助SELECT
的最后一行。如何成功比较两个表RESERVATIONS
和BORROWED_BOOKS
,并返回某种标志(?),然后可以输出该标志以指示该表当前是否已保留?而且,我将如何构造该特定比较的JOIN
?
RESERVATIONS
和BORROWED_BOOKS
之间的共同列是:Book_ID。这不是关系,只是他们俩共享此列。
答案 0 :(得分:0)
您可以EXISTS
EXISTS( SELECT * FROM BORROWED_BOOKS WHERE Book_ID = R.Book_ID)
示例
SELECT
M.Member_ID,
M.Name_U,
R.Book_ID,
C.ISBN,
C.Title,
C.Description_B,
R.Reservation_date,
EXISTS( SELECT * FROM BORROWED_BOOKS WHERE Book_ID = R.Book_ID) as reserved,
SOMETHING AS 'Loan Status'
FROM
dbo.Reservations R
INNER JOIN
dbo.Library_Members M ON R.Member_ID = M.Member_ID
INNER JOIN
dbo.[Library_Books] B ON R.Book_ID = B.Book_ID
INNER JOIN
dbo.Catalogue C ON C.ISBN = B.ISBN
ORDER BY M.Member_ID ASC