首页 > 解决方案 > 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%")

我应该对此查询进行哪些更改以获得所需的结果,因为目前此查询将返回空结果。

标签: mysqlone-to-many

解决方案


你可以试试 :

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"

没有尝试过,但它应该可以正常工作,还要确保没有语法错误,因为我没有检查它。

让我知道它是否不起作用。

祝你好运 !


推荐阅读