我如何LEFT
并添加WHERE
条件?
它没有读取它带来所有ridedriver
对象的位置?
SELECT p
FROM RideDriverEmployeeBundle:Ridedriver p
LEFT JOIN Chaya3niUserBundle:Bookings b WITH b.idridedriver = p.id
WHERE p.frequency IS NOT NULL
AND p.nbrplaces > 0
AND b.iduser != 2
OR b.iduser IS NULL
答案 0 :(得分:0)
如果我正确理解您的问题,则可能是您的WHERE
条款存在问题。尝试将parantheses与条款的OR
部分一起使用。
SELECT p
FROM RideDriverEmployeeBundle:Ridedriver p
LEFT JOIN Chaya3niUserBundle:Bookings b WITH b.idridedriver = p.id
WHERE p.frequency IS NOT NULL
AND p.nbrplaces > 0
AND (b.iduser != 2 OR b.iduser IS NULL)
回答你在评论中提出的问题..
我想选择除用户已在
中预订的所有驱动程序之外的所有驱动程序
听起来你只是不想要WHERE
条款中的其他条件。
SELECT p
FROM RideDriverEmployeeBundle:Ridedriver p
LEFT JOIN Chaya3niUserBundle:Bookings b WITH b.idridedriver = p.id
WHERE b.iduser IS NULL
通过执行LEFT JOIN
,然后仅使用WHERE .. IS NULL
获取联接表中不存在的记录,这样做LEFT OUTER JOIN
。
在您的情况下,{A}是表A,Ridedriver
是表B,因此这将返回Bookings
中未加入Ridedriver
中任何内容的记录。