【问题标题】:What is the difference between InnerJoin WITH and inner join ON?内连接 WITH 和内连接 ON 有什么区别?
【发布时间】:2014-04-11 22:31:05
【问题描述】:

在阅读 Doctrine 2 Documentation at this page 时,我可以看到他们有两种方法来指定内部连接的条件:

// Example - $qb->expr()->innerJoin('u.Group', 'g', Expr\Join::WITH, 'g.manager_level = 100');
// Example - $qb->expr()->innerJoin('u.Group', 'g', 'WITH', $qb->expr()->eq('g.manager_level', '100'));
public function innerJoin($join, $alias, $conditionType = null, $condition = null); // Returns Expr\Join instance

// Example - $qb->innerJoin('u.Group', 'g', Expr\Join::ON, $qb->expr()->and($qb->expr()->eq('u.group_id', 'g.id'), 'g.name = ?1'))
// Example - $qb->innerJoin('u.Group', 'g', 'ON', 'u.group_id = g.id AND g.name = ?1')
public function innerJoin($join, $alias = null, $conditionType = null, $condition = null);

我不明白其中的区别,因为 innerjoin 仅在找到匹配项时才返回内容,并且我找不到任何关于此的文档。

谢谢

【问题讨论】:

    标签: php mysql sql symfony doctrine-orm


    【解决方案1】:

    看起来它们是同义词。基于 Doctrine EBNF 表达式(在 http://docs.doctrine-project.org/en/2.0.x/reference/dql-doctrine-query-language.html#from-join-and-index-by 找到),Doctrine 似乎更喜欢 WITH。但是,MySQL(可能还有其他 SQL 数据库)使用 ON,所以我猜 Doctrine 的作者包含了该表达式以避免混淆用户。

    Doctrine 的开发人员编写了他们自己的 SQL 变体 - 这是因为 Doctrine 是一个对象关系管理器 (ORM),而不是一个直接的查询构建器。他们的 SQL 变体旨在与他们的对象一起工作。因此,例如,如果您正在构建 usergroup 模型并希望表达它们之间的关系,您可以在 Doctrine 的查询语言中这样做,它会自动处理 JOIN 条件。

    【讨论】:

    • 谢谢,所以,基本上,ON 和 WITH 在这里做同样的事情吗?
    • 我相信......这就是我从阅读文档中得到的。不过,我从未使用过 Doctrine。
    【解决方案2】:

    我喜欢这个解释:

    如果您在使用单词 JOIN 时不指定类型,则默认为 INNER JOIN。

    您也可以使用 LEFT OUTER JOIN 或 RIGHT OUTER JOIN,在这种情况下 OUTER 是可选的,或者 >您可以指定 CROSS JOIN。

    【讨论】:

    • 这不是这里的问题,我知道右左内连接和外连接的区别。这里是关于 ON 和 WITH 作为内部连接的条件
    猜你喜欢
    • 2023-03-29
    • 2020-06-15
    • 2011-02-12
    • 2010-10-01
    • 2013-08-25
    • 1970-01-01
    • 2014-07-06
    • 2012-01-31
    相关资源
    最近更新 更多