我在Access工作区中使用此查询:
cnn_.Execute "UPDATE a SET a.trasco_id_object = b.pratica " & _
"FROM trasco_utilizzi_oggetto a, oggetti_pratica b, pratiche_tributo c, denunce_ici d " & _
"WHERE c.pratica = D.pratica AND b.pratica = c.pratica AND a.oggetto = b.oggetto " & _
"AND b.pratica = (SELECT MIN(b.pratica) FROM oggetti_pratica bb WHERE c.pratica = d.pratica AND bb.pratica = c.pratica AND bb.oggetto = b.oggetto)"
Run Code Online (Sandbox Code Playgroud)
但使用此我收到以下错误:
聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用.
现在,我想问题是select(min)SQL Server 2014不喜欢,但是这个聚合确实在选择中,或者我在这里犯了错误?
如果你使用一些正确的别名和一些正确的JOIN语法,它会使问题更容易发现:
UPDATE tuo
SET trasco_id_object = op.pratica
FROM trasco_utilizzi_oggetto tuo
JOIN oggetti_pratica op ON tuo.oggetto = op.oggetto
JOIN pratiche_tributo pt ON op.pratica = pt.pratica
JOIN denunce_ici di ON pt.pratica = di.pratica
WHERE op.pratica = (SELECT MIN(op.pratica)
FROM oggetti_pratica sq
WHERE pt.pratica = di.pratica
AND sq.pratica = pt.pratica
AND sq.oggetto = op.oggetto);
Run Code Online (Sandbox Code Playgroud)
具体来说,请注意MIN(op.pratica),但表格别名为sq.它应该是MIN(sq.pratica).
我也怀疑pt.pratica = di.pratica第二次是否需要WHERE(已经存在ON).因此您的查询变为:
UPDATE tuo
SET trasco_id_object = op.pratica
FROM trasco_utilizzi_oggetto tuo
JOIN oggetti_pratica op ON tuo.oggetto = op.oggetto
JOIN pratiche_tributo pt ON op.pratica = pt.pratica
JOIN denunce_ici di ON pt.pratica = di.pratica
WHERE op.pratica = (SELECT MIN(sq.pratica)
FROM oggetti_pratica sq
WHERE sq.pratica = pt.pratica
AND sq.oggetto = op.oggetto);
Run Code Online (Sandbox Code Playgroud)
重申一下我的评论:糟糕的习惯:使用旧式JOIN,另外还有糟糕的习惯:使用表别名,如(a,b,c)或(t1,t2,t3).
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |