我有两个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语句可以自行运行。这有什么问题?
谢谢!
答案 0 :(得分:1)
我想不出会发生这种情况的机制。据我所知,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
之间的差异应该介于任何可以忽略不计的范围之间。前者更容易输入。