我正在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不喜欢,但是聚合确实处于选择状态,还是我在这里犯错了?
答案 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)
...