我有两个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之间的区别应该在任何可以忽略不计的范围之间.前者更容易打字.