Mysql 在select中尝试使用求和差异的子查询-原则2.6.4
我试图在symfony和Doctrine 2.6.4中进行一些查询 我的问题是,我试图在select中执行一些子查询。在Mysql中,它看起来像:Mysql 在select中尝试使用求和差异的子查询-原则2.6.4,mysql,symfony,orm,doctrine,Mysql,Symfony,Orm,Doctrine,我试图在symfony和Doctrine 2.6.4中进行一些查询 我的问题是,我试图在select中执行一些子查询。在Mysql中,它看起来像: SELECT COALESCE((SELECT SUM(bill.amount) FROM bill WHERE bill.bill__client_id = cl.id), 0) AS
SELECT
COALESCE((SELECT
SUM(bill.amount)
FROM
bill
WHERE
bill.bill__client_id = cl.id),
0) AS `total_to_pay`,
COALESCE((SELECT
SUM(payement.price + payement.taxes)
FROM
payement
WHERE
payement.payement__client_id = cl.id),
0) AS `total_already_pay`,
COALESCE((SELECT
SUM(bill.amount)
FROM
bill
WHERE
bill.bill__client_id = cl.id),
0) - COALESCE((SELECT
SUM(payement.price + payement.taxes)
FROM
payement
WHERE
payement.payement__client_id = cl.id),
0) AS `total_to_pay_today`
FROM
client AS cl
在哪里
cl.id=x
在理论上,我尝试了以下方法:
$query = $this->createQueryBuilder('cl')
->addSelect('(SELECT SUM(bi.amount) FROM App\Entity\Bill bi WHERE bi.billClient = cl.id) AS total_to_pay')
->addSelect('(SELECT SUM(pa.amount) FROM App\Entity\Payments pa WHERE pa.payementClient = cl.id) AS total_already_pay')
->addSelect('(SELECT SUM(bii.amount) FROM App\Entity\Bill bii WHERE bii.billClient = cl.id)-(SELECT SUM(paa.price + paa.taxes) FROM App\Entity\Payments paa WHERE pa.payementClient = cl.id) as total_to_pay_today')
->where('cl.id = :client_id')
->setParameter('client_id', $id)
->getQuery()
->getSQL();
它将返回以下错误:
Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '-'
谢谢你的回答 我认为应该使用联接而不是子选择:
->addSelect('SUM(bi.amount) as total_to_pay')
->addSelect('SUM(pa.amount) as total_already_pay')
->addSelect('SUM(bi.amount) - SUM(pa.price + pa.taxes) as total_to_pay_today')
->where('cl.id = :client_id')
->leftJoin('App\Entity\Bill', 'bi', 'WITH', 'bi.billClient = cl.id')
->leftJoin('App\Entity\Payments', 'pa', 'WITH', 'pa.payementClient = cl.id')
->groupBy('cl.id')
问题不在于条令,而在于你的子查询。您不能添加/删除不同查询的etc结果,您可以通过尝试获取以下结果进行检查:
从id=1的用户中选择3-从id=1的用户中选择2;
非常相似的错误:
[42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '- (SELECT 2 FROM users WHERE id = 1)' at line 1