我试图编写更复杂/更好的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"
感谢您的帮助!
答案 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
的规则恰恰相反。