views:

986

answers:

1

Is it possible to create a nested looping query in Access DB that will update a third table?

I have a master (header) table:

------------------------
masters
------------------------
num | modality | cost  |
------------------------
01  | thing    | 23.00 |
02  | thing    | 42.00 |
03  | thing    | 56.00 |
04  | apple    | 11.00 |
05  | apple    | 17.00 |

and a temporary table containing detail info that I'll need to create a third (actual) details table which will key off of the masters table

here's a sample of the temp details table.

----------------------------------
temps
----------------------------------
modelnumber | modality | priceEa |
----------------------------------
| 123       | thing    | 1.00    |
| 234       | apple    | 2.00    |
| 345       | apple    | 3.00    |
| 456       | apple    | 4.00    |
| 567       | thing    | 5.00    |

Basically, I need to loop through every record in the masters table.

Outer loop:

For each record in the masters table, grab the modality.

Inner loop:

Then for each record in the temps table, where the modalities match, create a record in the details table (and in the process, do some calculations based on temps.priceEa and masters.cost).

This should create (masters * temps) number of new records in the details table for every record in the masters table.

the details table, should end up looking like

----------------------------------------------------------
details
----------------------------------------------------------
num  | modelnumber | modality | priceEa  |  adjustedCost |
----------------------------------------------------------
| 01 | 123         | thing     | 1.00    | (do calc here)
| 01 | 567         | thing     | 5.00    | (do calc here)
| 02 | 123         | thing     | 1.00    | (do calc here)
| 02 | 567         | thing     | 5.00    | (do calc here)
| 03 | 123         | thing     | 1.00    | (do calc here)
| 03 | 567         | thing     | 5.00    | (do calc here)
| 04 | 234         | apple     | 2.00    | (do calc here)
| 04 | 345         | apple     | 3.00    | (do calc here)
| 04 | 456         | apple     | 4.00    | (do calc here)
| 05 | 234         | apple     | 2.00    | (do calc here)
| 05 | 345         | apple     | 3.00    | (do calc here)
| 05 | 456         | apple     | 4.00    | (do calc here)
...etc
+1  A: 

SELECT m.num, t.modelnumber, m.modality, t.priceea
into myNewTempTable
from masters m  inner  join temp t on m.modality = t.modality
order by m.num, t.modelnumber

shahkalpesh
I think you didz it! It's not funny how sometimes sql performs looping updates/inserts without really looking like it's going to do it... it makes my brain think the problem through the wrong way. Thank you.
42
Erm, SQL does not perform looping conceptually. Perhaps it would help if you think in terms of a SQL updating/inserting all rows affected rows all at once.
onedaywhen