比较两个表。想要返回标志

时间:2018-11-26 03:05:16

标签: sql sql-server

我的数据库有很多表,它们之间有很多关系。但是这个问题特别涉及到三个表。

我的图书馆中有"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的最后一行。如何成功比较两个表RESERVATIONSBORROWED_BOOKS,并返回某种标志(?),然后可以输出该标志以指示该表当前是否已保留?而且,我将如何构造该特定比较的JOIN

RESERVATIONSBORROWED_BOOKS之间的共同列是:Book_ID。这不是关系,只是他们俩共享此列。

1 个答案:

答案 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