我不想做任何特殊的魔术,只需将我的查询LEFT JOIN到子查询。我已经尝试过在互联网上找到的许多方法和技巧,但是没有人工作,我总是得到无用的错误信息,这些信息告诉你注意问题是有意义的,或者没有指出寻找解决方案。
这是我的子查询和查询:
$subQuery = $qb
->select("DISTINCT TRIM(cp.originalteilenummer) AS productCode")
->from(\Vendor\ShopBundle\Entity\ExternalProduct::class, 'cp')
->getQuery();
$result = self::$entityManager->createQueryBuilder()
->select('c.id,
c.manufacturerId,
cu.fullName,
c.vin,
c.plateNumber,
c.netDiscountPrice,
c.calculationDate,
u.loginName,
c.lastOfferSentAt,
COUNT(DISTINCT i.id) AS items,
c.customerDmsId,
GROUP_CONCAT(cp.productCode) AS productCodes')
->from(\Vendor\ShopBundle\Entity\Calculation::class, 'c')
->innerJoin(\Vendor\ShopBundle\Entity\CalculationItem::class, 'i', 'WITH', 'c.id = i.orderId')
->leftJoin(\Vendor\UserBundle\Entity\User::class, 'u', 'WITH', 'c.openedBy = u.id')
->leftJoin(\Vendor\CoreBundle\Entity\User::class, 'cu', 'WITH', 'c.customerDmsId = cu.user')
->leftJoin(sprintf('(%s)', $subQuery->getSQL()), 'cp', 'WITH', 'i.partNumber = cp.productCode')
->groupBy('c.id')
->getQuery()
->getScalarResult();
我只想将我的查询连接到子查询的数据集。我怎么能做到这一点?
如果我运行这个,我收到一个错误:
[语义错误]第0行,第773行附近'(SELECT DISTINCT':错误: 类'('未定义。
答案 0 :(得分:0)
使用QB和Doctrine,你想做的事情是不可能实现的。
更好的方法是在WITH IN / NOT IN中使用子查询。但它可能不是你想要的。
来源:
How to create LEFT JOIN with SELECT subquery using QueryBuilder in Doctrine 2?
答案 1 :(得分:0)
这应该有用,您试图将getSQL()
改为使用getDQL()
<击> 撞击>
<击>->leftJoin(sprintf('(%s)', $subQuery->getSQL()), 'cp', 'WITH', 'i.partNumber = cp.productCode')
击> <击> 撞击>
要
->leftJoin('VendorShopBundle:ExternalProduct', 'cp', 'WITH', $qb->expr()->eq( 'i.partNumber', '('.$subQuery->getDQL().')' ))