MySQL 查询一个表中的活动值而不是另一个表中的值

问题描述 投票:0回答:1

假设我有包含以下信息的表格:

库存或不再库存的书籍的库存。

然后,假设还有另一个表指示是否有人拥有这本书的所有权。该表可以显示多个人以前拥有该书,但对于每个出售同一本书的人来说,状态都是“已删除”,表明他们不再拥有该书。如果第四个人当前拥有它,那么它将在表中显示该人的“活跃”状态。

还有一个时间戳,指示每个人何时售出一本书。

这是一些示例数据:

book_inventory表

id 书籍库存_id 状态 书名 返回日期
1 111 活跃 弗兰肯斯坦 2024-08-12
2 222 活跃 哈利波特 2023-04-15
3 333 活跃 指环王 2024-08-10
4 444 已删除 奥德赛 2024-02-01

book_ownership表

id 书籍库存_id 状态 书名
1 111 活跃 弗兰肯斯坦
2 222 已删除 哈利波特
3 222 已删除 哈利波特
4 222 活跃 哈利波特
5 333 已删除 指环王
6 333 已删除 指环王
7 444 已删除 奥德赛

如您所见,book_ownership 表包含同一 book_inventory_id 值的多个记录,这意味着该值仍保留在库存中,尽管它已经经历了多个所有者,其中 id = '4' 是当前所有者。

问题:如何编写 MySQL 查询来查找当前没有活动所有者但在图书库存中处于活动状态的图书?在上面的示例中,只有“指环王”没有当前所有者并且在图书库存中处于活动状态。

sql mysql database join
1个回答
0
投票

查询

select book_inventory.*
from book_inventory
left join book_ownership
on book_inventory.book_inventory_id = book_ownership.book_inventory_id and book_ownership.status = 'active'
where book.inventory.status = 'active' and book.ownership.id is null

说明:

  • 我们从
    book_inventory
  • 中选择
  • left join
    book_ownership
    一起使用,这样我们的库存和所有权以及不匹配的库存项目之间就会有适当的匹配
  • on
    子句中,我们定义了我们所认为的匹配,即
    book_inventory_id
    值和
    status
     的所有权 
    active
  • 的匹配
  • 但是在
    where
    子句中,我们过滤掉所有匹配的库存项目,因此结果中只留下不匹配的项目
  • 当然,我们确保我们有正确的库存
    status
© www.soinside.com 2019 - 2024. All rights reserved.