0

我该如何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
4

1 回答 1

0

如果我正确理解了您的问题,则可能是您的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

于 2017-03-29T14:16:02.923 回答