【发布时间】:2018-01-24 06:54:00
【问题描述】:
我不想做任何特殊的魔术,只需将我的查询 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();
我只想将我的查询加入到子查询的数据集中。我怎样才能做到这一点?
如果我运行这个,我会得到一个错误:
[Semantical Error] line 0, col 773 near '(SELECT DISTINCT': Error: 类 '(' 未定义。
【问题讨论】:
-
@Veve 当然可以,而且效果很好
-
花点时间学习 DQL(不是 SQL)的连接语法。提示:leftJoin(c.openBy','u') 就是你所需要的。掌握基础知识,然后专注于您的子查询。
-
@Cerad 没有子查询,基本查询可以正常工作。正如你所说 leftJoin(c.openBy','u') 就足够了,但前提是'c'和'u'之间存在关联,但在这种情况下没有。使用我使用的语法,可以通过给定条件连接两个“不相关”的实体。所以问题仍然是,学说肯定希望在我想传递子查询的地方有一个实体类。
标签: mysql doctrine-orm