复杂 MySQL 左连接查询

Complex MySQL left join query

我正在尝试编写更多 complex/better mysql 语句,但是我在使用逻辑创建语句时遇到了一些问题,并且我不完全确定如何去做。感谢您的帮助!

基本上我的目标是 Select 全部来自产品 table,然后为每个产品加入一个图像,其中显示 = 1

        "SELECT p
          FROM CurbbedUserBundle:Product p
          LEFT JOIN CurbbedUserBundle:ProductImages i
          ON p.id = i.id
          WHERE i.display = 1
          ORDER BY p.name ASC"

感谢您的帮助!

如果你想要一个 left join,那么第二个 table 上的所有条件都应该在 on 子句中。您需要将 where 中的条件移动到 on:

SELECT p
FROM CurbbedUserBundle:Product p LEFT JOIN
     CurbbedUserBundle:ProductImages i
     ON p.id = i.id AND i.display = 1
ORDER BY p.name ASC

编辑:

左连接的规则是它保留第一个 table 中的所有行,无论 on 条件是否为真。因此,如果您想按第一个 table 进行过滤,请将条件放在 where 子句中。它不会在 on 中执行任何操作。 right join 的规则正好相反。