在MS ACCESS中使用子查询更新



我试图使这个查询工作,但我得到错误:

UPDATE SIRADATOK T1 INNER JOIN (SELECT sirid, MAX(SzolgaltatasokDatumig) AS MAXDATE
FROM ADOK GROUP BY SIRID HAVING MAX(SzolgaltatasokDatumig)<>' ' AND
MAX(SzolgaltatasokDatumig) IS NOT NULL)  AS T2 ON T1.SIRID=T2.sirid 
SET MegvaltasIdeje = MAXDATE;

我得到的错误:

"操作必须使用可更新的查询">

我也试过这样做:

UPDATE T2 
SET T1.MegvaltasIdeje = T2.MAXDATE
FROM SIRADATOK T1, (SELECT sirid, MAX(SzolgaltatasokDatumig) AS MAXDATE 
FROM ADOK GROUP BY SIRID HAVING MAX(SzolgaltatasokDatumig)<>' ' 
AND MAX(SzolgaltatasokDatumig) IS NOT NULL)  T2 
WHERE  T1.SIRID=T2.sirid

但是我得到:

"查询表达式'T2 '语法错误(缺少运算符)。MAXDATE FROM SIRADATOK T1'.">

使用June7注释,我创建了以下查询,它可以工作:

UPDATE 
SIRADATOK AS T1 
SET 
T1.MegvaltasIdeje = MID(
DMAX(
"SzolgaltatasokDatumig", "Adok", 
"SzolgaltatasokDatumig<>' ' 
AND SzolgaltatasokDatumig IS NOT NULL AND SIRID=" & T1.SIRID
), 
1, 
10
) 
WHERE 
DMAX(
"SzolgaltatasokDatumig", "Adok", 
"SzolgaltatasokDatumig<>' ' 
AND SzolgaltatasokDatumig IS NOT NULL AND SIRID=" & T1.SIRID
) Is Not Null 
And DMAX(
"SzolgaltatasokDatumig", "Adok", 
"SzolgaltatasokDatumig<>' ' 
AND SzolgaltatasokDatumig IS NOT NULL AND SIRID=" & T1.SIRID
)<> ' '

我为SzolgaltatasokDatumig列添加了一个额外的MID,因为该列是一个DateTime,而我只需要Date我知道这不是最好的优化查询,但这只是一次性使用,它的工作。

再次感谢,June7