I have an Access DB which contains this Fields:
- ID (autonumber)
- IDArr (numeric)
- Importo (Decimal)
- Pv (numeric)
- Closed (boolean)
I want to set the Closed field to true if sum of Importo is = 0 grouping by IDArr field and I have tried with this query:
UPDATE ln
SET closed = true
WHERE Val(idarr) = EXISTS (SELECT idarr
FROM ln
WHERE Val(pv) > 0
AND chiuso = false
GROUP BY idarrivo
HAVING SUM(importo) = 0
ORDER BY idarr)
Result is 0 fields. However, if I run this query separately like this:
SELECT idarr
FROM ln
WHERE Val(pv) > 0
AND chiuso = false
GROUP BY idarrivo
HAVING SUM(importo) = 0
ORDER BY idarr
I obtain a correct result showing a set of record. Who can help me? Thanks in advance.
CodePudding user response:
if as you say, the inner query is correct, it sounds like you want to do something like this (I can see no reason whatever that you are trying to use exists in your query, that is not going to work at all - remember that exists evaluates to true or false, but you want the idarr values in your subquery, not just a true or false as to whether or not they exist):
update LN
set Closed = true
where
IdArr in (
select idarr from LN
where val(PV) > 0
and chiuso = false
group by idarrivo
having sum(importo) = 0)
CodePudding user response:
you are using the EXISTS wrong and when you uise it like beow it is much fatser than the IN clause
UPDATE ln
SET closed = true
WHERE EXISTS (SELECT 1
FROM ln As ln2
WHERE Val(pv) > 0
AND chiuso = false
AND ln2.idarr = ln.idarr)
