sql – 两个SELECT-Statement单独工作但不能一起工作

我有两个select语句可以自己工作,但不能一起工作.

这个:

SELECT MAX(a2.Fachanzahl)
FROM C17_AbfrageBView a2;

工作并返回一行,其中一列值为2

这个:

SELECT a1.PersonID, a1.Vorname, a1.Nachname, MAX(a1.Fachanzahl) Fachanzahl
FROM C17_AbfrageBView a1
GROUP BY a1.PersonID, a1.Vorname, a1.Nachname
HAVING MAX(a1.Fachanzahl) = 2;

工作并返回正确的行.

但是,这个:

SELECT a1.PersonID, a1.Vorname, a1.Nachname, MAX(a1.Fachanzahl) Fachanzahl
FROM C17_AbfrageBView a1
GROUP BY a1.PersonID, a1.Vorname, a1.Nachname
HAVING MAX(a1.Fachanzahl) = (
                              SELECT MAX(a2.Fachanzahl)
                              FROM C17_AbfrageBView a2
                            );

不返回任何内容(它应返回与上述语句相同的行),即使外部和内部select语句可以自行运行.这里有什么问题?

谢谢!

最佳答案 我想不出会发生这种情况的机制.据我所知,MAX()不会改变列的类型,排除浮动舍入错误或整理不兼容等问题.

我可以说如果使用WHERE而不是HAVING编写查询会更有效:

SELECT DISTINCT a1.PersonID, a1.Vorname, a1.Nachname, a1.Fachanzahl
FROM C17_AbfrageBView a1
WHERE a1.Fachanzahl = (SELECT MAX(a2.Fachanzahl)
                       FROM C17_AbfrageBView a2
                      );

如果MAX()在纳米变化中引入了一些问题,那么这可能会解决问题.

因为您只关心最大值(至少在问题中的查询中),所以您可以先过滤.这使查询更有效. SELECT DISTINCT和GROUP BY之间的区别应该在任何可以忽略不计的范围之间.前者更容易打字.

点赞