簡體   English   中英

SQL 中 3 個表的 Select 信息

[英]Select information from 3 tables in SQL

我在 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,但結果也是錯誤的。

什么是返回所有未借出的書籍(及其相關作者)的查詢?

您加入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

您能否嘗試執行此操作:

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 = ''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM