mysql - MySQL如何通过Where子句获得具有一对多关系的结果
问题描述
我有两个带有属性(id,name)的表,一个人可以有多个带有属性(name,status)状态的书,如果他完成了这本书。当一个人完成了 A 书但没有完成 B 书时,我怎样才能得到结果。
Select *
from Person, Book, PersonBook
Where Person.id = PersonBook.personid
and Book.id = PersonBook.bookid
and ( book.name = "BookA"
and book.status like "%Completed%")
and ( book.name = "BookB"
and book.status not like "%Completed%")
我应该对此查询进行哪些更改以获得所需的结果,因为目前此查询将返回空结果。
解决方案
你可以试试 :
select pb.* from PersonBook pb join Person p on pb.personid = p.id join Book b1 on pb.bookid = b1.id and b1.name = "BookA" and b1.status like "Completed" join Book b2 on pb.bookid = b2.id and b2.name = "BookB" and b2.status not like "Completed"
没有尝试过,但它应该可以正常工作,还要确保没有语法错误,因为我没有检查它。
让我知道它是否不起作用。
祝你好运 !
推荐阅读
- bash - 使用 awk 从第 1 列获取唯一值,并对第 2 列中的对应值求和?
- vba - 从日期选择器表单中填充用户表单内的文本框
- swift - lldb 错误:无法查找符号。斯威夫特 iOS
- linux - 通过蓝牙重新连接 iphone 时出现“acl 连接已存在”错误
- c# - 使用 mailgun 特定域 api 从 c# 中删除 mailgun,maillist 收件人
- javascript - 如果在获取子字符串时重复,正则表达式将忽略起始字符
- javascript - 如何遍历 MarkLogic 中的序列值?
- node.js - 有没有办法对此进行可能的冷却
- javascript - 如何添加下一个上一个按钮以更改 javascript 中的选项卡内容?
- python - 从 API 读取数据并将其保存到 python 上的 csv 文件