使用左连接的查询返回的行数较少

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

在Symfony项目中使用Doctrine会让我感到困惑。当从单个实体请求所有行时,我获得的行数比我将另一个表连接到同一个表时获得的行数更多。

这会返回更多行:

$query = $this->getEntityManager()->createQueryBuilder();
$query->select('obj')
    ->from('AppBundle:Data', 'obj');

比这个:

$query = $this->getEntityManager()->createQueryBuilder();
$query->select('obj')
    ->from('AppBundle:Data', 'obj')
    ->leftJoin('obj.subDatas', 'sd')
    ->leftJoin('sd.subSubDatas', 'ssd');

怎么会这样?我猜这可能是一个innerJoin的情况,但我认为使用leftJoin时结果至少会有多少行,或者更多行。

这是预期的吗?

UPDATE

所以我认为这种混淆的实际原因似乎是在上面的查询后添加的分页:

$query
    ->setMaxResults(20)
    ->setFirstResult(0);

看起来这与上面使用的leftJoin效果不佳(这就是为什么结果计数在第一个例子中是正确的)。使用leftJoins时如何让它返回正确的行数?

sql symfony doctrine left-join
1个回答
1
投票

如果您的左连接属于多个关系,则它是SQL中常见的笛卡尔积。来自obj的行扩展了sdssd的所有可能值。

如果要在DQL中使用toMany关系对查询进行分页,则需要一个适当的分页器来处理doctrine水合作用。

© www.soinside.com 2019 - 2024. All rights reserved.