Symfony Doctrine:在不使用 EXISTS 的情况下使用带有 "HAVING" 子句的子查询
Symfony Doctrine: Use of subquery with "HAVING" clause without using EXISTS
在 Symfony 项目中,我正在尝试使用计算字段进行查询。简化很多我的 SQL 会是这样的:
SELECT o.id, (p.price_a + p.price_b) as total_price
FROM objects o
INNER JOIN prices p
ON o.id = p.object_id
HAVING total_price > 10
我的计算字段比较复杂,使用的是变化的外部值,我无法预先计算它。
因为我只想要不同的 object.id 我已经将上面的代码添加为子查询:
SELECT DISTINCT o_id
FROM (
SELECT o.id as o_id, (p.price_a + p.price_b) as total_price
FROM object o
INNER JOIN price p
ON o.id = p.object_id
HAVING total_price > 10)
在 Symfony 中,我希望此查询 returns 只有不同的 "Object"。
我尝试了很多查询生成器选项,但我无法将子查询添加到 "FROM" 子句。
我尽量避免使用低效的 EXISTS 子句:
SELECT DISTINCT o.id
FROM objects o
WHERE EXISTS (
SELECT p.*, (p.price_a + p.price_b) as total_price
FROM prices p
WHERE o.id = p.object_id
HAVING total_price > 10)
有没有什么方法可以在不使用 "EXISTS" 的情况下使用查询生成器执行此操作?
多亏了 HIDDEN 关键字,我已经解决了这个问题。使用 HIDDEN 您可以标记一个字段以避免 ORM 获取。完美去除计算字段。
使用 DQL:
SELECT o, (p.price_a + p.price_b) AS HIDDEN total_price
FROM TestObjectBundle:Object o
INNER JOIN TestObjectBuncle:Price p
GROUP BY o
HAVING total_price > 10
在 Symfony 项目中,我正在尝试使用计算字段进行查询。简化很多我的 SQL 会是这样的:
SELECT o.id, (p.price_a + p.price_b) as total_price
FROM objects o
INNER JOIN prices p
ON o.id = p.object_id
HAVING total_price > 10
我的计算字段比较复杂,使用的是变化的外部值,我无法预先计算它。
因为我只想要不同的 object.id 我已经将上面的代码添加为子查询:
SELECT DISTINCT o_id
FROM (
SELECT o.id as o_id, (p.price_a + p.price_b) as total_price
FROM object o
INNER JOIN price p
ON o.id = p.object_id
HAVING total_price > 10)
在 Symfony 中,我希望此查询 returns 只有不同的 "Object"。
我尝试了很多查询生成器选项,但我无法将子查询添加到 "FROM" 子句。
我尽量避免使用低效的 EXISTS 子句:
SELECT DISTINCT o.id
FROM objects o
WHERE EXISTS (
SELECT p.*, (p.price_a + p.price_b) as total_price
FROM prices p
WHERE o.id = p.object_id
HAVING total_price > 10)
有没有什么方法可以在不使用 "EXISTS" 的情况下使用查询生成器执行此操作?
多亏了 HIDDEN 关键字,我已经解决了这个问题。使用 HIDDEN 您可以标记一个字段以避免 ORM 获取。完美去除计算字段。
使用 DQL:
SELECT o, (p.price_a + p.price_b) AS HIDDEN total_price
FROM TestObjectBundle:Object o
INNER JOIN TestObjectBuncle:Price p
GROUP BY o
HAVING total_price > 10