我有一个一对多的关系,看起来像这样:
| Parent | | Child | | id | | id | | | |parentID| | | | date |
我正在尝试构造一个查询,以使我得到所有拥有孩子记录的父母,这些孩子记录的所有日期都在指定日期之前。
像这样
SELECT * FROM parent JOIN child on child.parentid = parent.id WHERE child.date <= '10/13/2010'
但这是一个问题,当我只希望孩子的父母的日期早于给定日期时,我得到的父母的孩子的日期早于指定日期,而孩子记录的日期早于指定日期。
有人对如何处理此案有任何建议吗?
谢谢!
使用:
SELECT p.* FROM PARENT p WHERE EXISTS(SELECT NULL FROM CHILD c WHERE c.parentid = p.id AND c.date <= '2010-10-13') AND NOT EXISTS(SELECT NULL FROM CHILD c WHERE c.parentid = p.id AND c.date > '2010-10-13')
每个人都会告诉你使用连接“因为他们更快”,但它们通常是不知道的影响, 利用 他们- 如果你不需要从支持表中的信息,你不应该加入到它。这是因为在这种情况下,不止一个孩子会产生重复的PARENT记录。JOIN和DISTINCT或GROUP BY与IN或EXISTS之间的折衷可能是同等的,但不会有适当处理重复数据的麻烦。