SQL Server中的MIN函数问题

时间:2019-01-08 14:11:01

标签: sql-server min

我正在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)"

但是使用它我得到以下错误:

  

除非聚集在HAVING子句或选择列表中包含的子查询中,并且聚集的列是外部引用,否则聚集可能不会出现在WHERE子句中。

现在,我想的问题是select(min) SQL Server 2014不喜欢,但是聚合确实处于选择状态,还是我在这里犯错了?

2 个答案:

答案 0 :(得分:5)

如果使用适当的别名和适当的<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div class="nowplaying"></div> <script src="https://cdn.jsdelivr.net/jquery/3.2.0/jquery.min.js"></script> <script> setInterval(function() { $.ajax({ url: "http://178.19.116.253/currentsong?sid=1", dataType: "html", success: function(data) { $('.nowplaying').text(data); console.log(data); } }); }, 1000); </script> </body> </html> 语法,则使问题更容易发现:

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); ,但是该表的别名为MIN(op.pratica)。应该是sq

我还怀疑第二个MIN(sq.pratica)是否需要pt.pratica = di.pratica(已经在WHERE中)了。因此,您的查询将变为:

ON

要重申我的评论:Bad habits to kick: Using old style JOINs,还有Bad habits to kick : using table aliases like (a, b, c) or (t1, t2, t3)

答案 1 :(得分:1)

是的。您丢失了oggetti_pratica b在外部FROM子句中,因此sum(b.pratica)是外部查询的聚合。

您可能想要bb.pratica

...
b.pratica = (SELECT MIN(bb.pratica) FROM oggetti_pratica bb WHERE c.pratica = d.pratica AND bb.pratica = c.pratica AND bb.oggetto = b.oggetto)
...