Циклы MS-Access SQL - PullRequest
       3

Циклы MS-Access SQL

1 голос
/ 29 марта 2012

Я хотел бы применить цикл for в этом выражении sql в ms-access что-то вроде:

for(i=0;i<8;i++)
{
UPDATE current_stock SET current_stock.quantity = DLookup("quantity","current_stock","stock_id=i")-DLookup("req_quantity","Bom_dell","lap_id=(SELECT lap_id FROM laptop_info WHERE model_name='Dell Inspiron')" And "stock_id=i")
WHERE stock_id=1;
}

Пожалуйста, сообщите, если в MS-доступе есть какой-либо метод, позволяющий сделать что-то похожее на цикл for с использованием SQL-запросов.


Bom_dell

bom_id lap_id stock_id req_quantity
1         1       1        1
2         1       2        3
3         1       3        6
4         1       4        1
5         1       5        1
6         1       6        2
7         2       7        7
8         2       8        8
9         2       9        1
10        2      10        1
11        2      11        1
12        2      12        3

current_stock

ID lap_id stock_id quantity
1     1       1        11
2     1       2        11
3     1       3        11

lap_info

lap_id model_name     model_num price
1      Dell Inspiron  INS81     35000
2      Dell XLS       XL91      24000

Пример запроса

UPDATE (SELECT laptop_info.model_name, current_stock.stock_id, Bom_dell.req_quantity, current_stock.quantity
FROM (current_stock INNER JOIN laptop_info ON current_stock.lap_id = laptop_info.lap_id) INNER JOIN Bom_dell ON current_stock.stock_id = Bom_dell.stock_id)

SET quantity=quantity-req_quantity
WHERE stock_id BETWEEN 1 AND 3
AND model_name='Dell Inspiron'

laptop info current stock bom_dell

UPDATE (SELECT laptop_info.model_name, current_stock.stock_id, Bom_dell.req_quantity, current_stock.quantity
FROM (current_stock INNER JOIN laptop_info ON current_stock.lap_id = laptop_info.lap_id) INNER JOIN Bom_dell ON current_stock.stock_id = Bom_dell.stock_id) SET quantity = quantity-req_quantity
WHERE stock_id BETWEEN 1 AND 3
AND model_name IN ([Forms]![Invoice1]![laptop_id])

1 Ответ

1 голос
/ 29 марта 2012

Похоже, вы ищете что-то вроде:

UPDATE (current_stock 
INNER JOIN laptop_info ON laptop_info.stock_id=current_stock.stock_id)
INNER JOIN Bom_dell ON Bom_dell.lap_id = laptop_info.lap_id
SET current_stock.quantity = current_stock.quantity - Bom_dell.req_quantity
WHERE stock_id Between 1 And 8 
AND model_name='Dell Inspiron'

Попробуйте этоЯ использовал псевдонимы - a для таблицы current_stock и b для подзапроса.Это предполагает, что у вас есть одна строка для каждого идентификатора акции в bom_dell.

UPDATE current_stock AS a 
INNER JOIN (
   SELECT bom_dell.stock_id, lap_info.model_name, bom_dell.req_quantity
   FROM bom_dell 
   INNER JOIN lap_info ON bom_dell.lap_id = lap_info.lap_id
   WHERE (((bom_dell.stock_id) Between 1 And 3) 
   AND ((lap_info.model_name)="Dell Inspiron")))  AS b 
ON a.Stock_id = b.Stock_id SET a.quantity = [a].[quantity]+[b].[req_quantity];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...