【发布时间】:2017-04-05 10:16:09
【问题描述】:
我有一个像这样的“schLoc”表
--------------------------------
| id | importo | iva | totale |
--------------------------------
| 1 | NULL | NULL | NULL |
| 2 | NULL | NULL | NULL |
| 3 | NULL | NULL | NULL |
| 4 | NULL | NULL | NULL |
| 5 | NULL | NULL | NULL |
| .. | NULL | NULL | NULL |
--------------------------------
还有另一个像这样的“schLocDett”表,像这样 schLoc.id=schLocDett.id
---------------------------------------------
| idDoc | importo | iva | totale | merce |
---------------------------------------------
| 1 | 1.00 | 0.20 | 1.20 | fattLoc |
| 1 | 1.50 | 0.30 | 1.80 | fattSrv |
| 2 | 2.25 | 0.45 | 2.70 | fattLoc |
| 2 | 3.10 | 0.62 | 3.72 | notcSrv |
| 2 | 7.20 | 1.44 | 8.64 | fattSrv |
| 3 | 8.35 | 1.67 | 10.02 | fattSrv |
| 3 | 3.10 | 0.62 | 3.72 | notcSrv |
| 3 | 2.25 | 0.45 | 2.70 | fattLoc |
| 3 | 2.25 | 0.45 | 2.70 | fattLoc |
| 4 | 3.10 | 0.62 | 3.72 | notcSrv |
| 4 | 7.20 | 1.44 | 8.64 | fattSrv |
| 4 | 8.35 | 1.67 | 10.02 | fattSrv |
| ... | .... | .... | ..... | ....... |
---------------------------------------------
我希望 importo、iva、totale foreach idDoc 的总和和这个选择查询完美地工作:
SELECT LOC.id, SUM(DETT.importo) as importo, SUM(DETT.iva) as iva, SUM(DETT.totale) as totale
FROM schLoc as LOC, schLocDett as DETT
WHERE LOC.id>0 AND LOC.id=DETT.idDoc AND (DETT.merce='fattLoc' OR DETT.merce='fattSrv')
GROUP BY idDoc
但同时我想更新“schLoc”表...我尝试这样
UPDATE schLoc AS LOC
INNER JOIN (
SELECT SUM( importo ) AS totImporto, SUM( iva ) AS totIva, SUM( totale ) AS totTotale
FROM schLocDett
WHERE idDoc=LOC.id AND (merce='fattLoc' OR merce='fattSrv')
) AS DETT
ON LOC.id=DETT.idDoc AND LOC.id>0
SET LOC.importo = DETT.totImporto, LOC.iva = DETT.totIva, LOC.totale = DETT.totTotale;
但不工作。
欢迎提出建议
【问题讨论】:
-
我猜可能对外部表的引用在子查询中不起作用(
idDoc=LOC.id)。如果是这样,只需添加它
标签: mysql sql select sql-update