复杂的MySQL左连接查询

时间:2015-03-24 18:58:51

标签: mysql sql symfony doctrine

我试图编写更复杂/更好的mysql语句但是我在使用逻辑创建语句方面有点绊倒,并且我不完全确定如何去做。任何帮助表示赞赏!

基本上我的目标陈述是从产品表中选择全部,然后为每个产品加入一个图像,其中display = 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"

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果你想要left join,那么第二个表上的所有条件都应该在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

编辑:

左连接的规则是,无论on条件是否为真,它都会将所有行保留在第一个表中。因此,如果要按第一个表进行筛选,请将条件放在where子句中。它不会在on中做任何事情。 right join的规则恰恰相反。