2016-12-17 84 views
0

此查询的目标是显示尚未创建任何货件的表订单中的记录。这里是它应该如何在SQL中完成:加入表为空的原则左连接显示结果

SELECT * 
FROM orders 
LEFT JOIN orders_shipments shipments ON orders.trx_id = shipments.trx_id 
WHERE shipments.shipment_id IS NULL 
AND orders.purchase_date IS NOT NULL 
AND orders.fulfillment_channel = 'MFN'; 

以下查询显示0个结果。 Vs如下:

$qb = $this->createQueryBuilder('orders'); 
     $qb->select('orders, shipments') 
     ->leftjoin('orders.shipments', 'shipments') 
     ->Where('shipments.id IS NULL') 
     ->ANDWhere('orders.purchaseDate IS NOT NULL') 
     ->ANDWhere('orders.fulfillmentChannel = :a')->setParameter('a', 'MFN');; 
     $results = $qb->getQuery() 
     ->getResult(); 
     return $results; 

是否显示结果。为什么是这样以及如何解决它?

+0

凡,ANDWhere是大写的错,但也许那不是问题。 –

+0

echo $ qb-> getQuery();' – goto

+0

-_dql:“选择订单,货物FROM OrderBundle \ Entity \ Orders订单LEFT JOIN orders.shipments货件WHERE shipments.id IS NULL AND orders.purchaseDate IS NOT NULL AND orders.fulfillmentChannel =:一个“ – user1029829

回答

1

不知道为什么,但我不得不使用基和具有以得到它的工作:

$qb = $this->createQueryBuilder('orders'); 
     $qb->select('orders, shipments') 
     ->leftjoin('orders.shipments', 'shipments') 
     ->Where('shipments.id IS NULL') 
     ->ANDWhere('orders.purchaseDate IS NOT NULL') 
     ->ANDWhere('orders.fulfillmentChannel = :a')->setParameter('a', 'MFN') 
     ->GroupBy('orders.id') 
     ->having('count(shipments) = 0'); 
     $results = $qb->getQuery()->getResult();