我有两个 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
);
不返回任何内容(它应该返回与上述语句相同的行),即使外部和内部选择语句独立工作。这里有什么问题?
谢谢!
最佳答案
我想不出会发生这种情况的机制。据我所知,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
应该介于无和可忽略之间。前者更容易打字。
关于sql - 两个 SELECT-Statement 单独工作但不一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48805167/