如何在教义中左加入子选择

  • 本文关键字:选择 mysql doctrine-orm
  • 更新时间 :
  • 英文 :


我不想做任何特殊的魔法,只是将我的查询左边加入到子查询中。我已经尝试了许多在互联网上找到的方法和技巧,但没有一种有效,而且我总是收到无用的错误消息,这些消息告诉人们注意问题有意义或没有意义寻找解决方案。

这是我的子查询和查询:

$subQuery = $qb
->select("DISTINCT TRIM(cp.originalteilenummer) AS productCode")
->from(VendorShopBundleEntityExternalProduct::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(VendorShopBundleEntityCalculation::class, 'c')
->innerJoin(VendorShopBundleEntityCalculationItem::class, 'i', 'WITH', 'c.id = i.orderId')
->leftJoin(VendorUserBundleEntityUser::class, 'u', 'WITH', 'c.openedBy = u.id')
->leftJoin(VendorCoreBundleEntityUser::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 行靠近"(选择不同":错误: 未定义类"("。

你试图做的事情可能无法用QB和教义来实现。

更好的方法是在 With in/not in 中使用子查询。但这可能不是你想要得到的。

来源:

如何在 Doctrine 2 中使用 QueryBuilder 创建带有 SELECT 子查询的 LEFT JOIN?

做一个地方..原则 2 中的 IN 子查询

这应该有效,您正在尝试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().')' ))

相关内容

  • 没有找到相关文章

最新更新