【问题标题】:Select information from 3 tables in SQL从 SQL 中的 3 个表中选择信息
【发布时间】:2020-03-10 19:21:19
【问题描述】:

我在 SQLite 数据库中有三个表:book、author 和 loaned_books。它们看起来像这样
书: _id |作者_id |标题 |主题
作者: _id |名字 |姓氏
借出的书本: _id | book_id |贷款日期 |到期日
author_id 是 author 表的外键, book_id 是 book 表的外键。

我正在尝试创建一个查询,以提取所有未借出的书籍(及其相关作者)。到目前为止,我有这个查询:

SELECT book.title, book.subject, author.first_name, author.last_name  
FROM book, author  
INNER JOIN loaned_books ON book._id != loaned_books.book_id AND book.author_id = author._id

除了所有返回的记录都是重复的之外,这个任务完成了。我曾尝试在列名上使用 DISTINCT,但结果也是错误的。

返回所有未借出的书籍(及其相关作者)的查询是什么?

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    你加入bookauthor的方式:

    FROM book, author
    

    错误,因为它返回 2 个表的笛卡尔积。
    您需要 LEFT JOIN 到 loaned_books 并返回不匹配的行(意味着在 loaned_books 中不存在的书籍)

    SELECT b.title, b.subject, a.first_name, a.last_name
    FROM book AS b
    INNER JOIN author AS a ON b.author_id = a._id
    LEFT JOIN loaned_books AS l ON b._id = l.book_id
    WHERE l._id IS NULL
    

    【讨论】:

      【解决方案2】:

      请您尝试执行此操作:

      SELECT distinct book.title, book.subject, author.first_name, author.last_name FROM book inner join author on book.id = author._id left outer join loaned_books ON book._id = loaned_books.book_id where loaned_books.book_id is null or length(loan_date) = 0 or loan_date = ''

      【讨论】:

      • 我在我的数据库上尝试了这个查询,但它不起作用。但是,我在上面接受的答案中的查询效果很好。
      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2014-07-04
      • 2014-04-07
      相关资源
      最近更新 更多