如果我正确理解了您的问题,则可能是您的WHERE
条款有问题。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
通过执行 aLEFT JOIN
然后只获取连接表中不存在的记录WHERE .. IS NULL
,这就是执行 a LEFT OUTER JOIN
。

在您的情况下Ridedriver
是表 A 和Bookings
表 B,因此这将返回Ridedriver
不加入任何内容的记录Bookings
。