You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写联合SQL查询高校图书馆可借阅图书的BookCode

可借阅图书查询SQL实现

核心逻辑:可借阅的图书 = 所有馆藏图书 - 存在未归还借阅记录的图书。你已经写好了不可借阅图书的查询逻辑,在此基础上有三种常用实现方案:

方案1:NOT IN 子查询(写法最直观)

直接将你现有不可借阅的查询结果作为排除集合即可:

SELECT DISTINCT "BookCode"
FROM "Book"
WHERE "BookCode" NOT IN (
    SELECT DISTINCT "BookCode"
    FROM "BorrowBook"
    WHERE "BorrowDate" IS NOT NULL AND "ReturnDate" IS NULL
);

方案2:LEFT JOIN 关联过滤(性能更优,适合数据量较大的场景)

通过左连接关联未归还的借阅记录,没有匹配到关联记录的就是可借阅图书:

SELECT DISTINCT b."BookCode"
FROM "Book" b
LEFT JOIN "BorrowBook" bb 
  ON b."BookCode" = bb."BookCode" 
  AND bb."BorrowDate" IS NOT NULL 
  AND bb."ReturnDate" IS NULL
WHERE bb."ID" IS NULL;

方案3:NOT EXISTS 子查询(逻辑严谨,不会受子查询空值影响)

SELECT DISTINCT "BookCode"
FROM "Book" b
WHERE NOT EXISTS (
    SELECT 1 
    FROM "BorrowBook" bb 
    WHERE bb."BookCode" = b."BookCode"
      AND bb."BorrowDate" IS NOT NULL 
      AND bb."ReturnDate" IS NULL
);

注意:你提供的测试数据存在字段值不匹配的问题:Book表的BookCode值为Book1/Book2/Book3,但BorrowBook表的BookCode值为B1/B2,实际业务中两个表的关联字段值一致后,上述SQL就能得到你要的B2、B3可借阅的结果。

内容的提问来源于stack exchange,提问作者Nukool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:45:04