4

我有两个单独工作的选择语句,但不能一起工作。

这个:

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
                            );

不返回任何内容(它应该返回与上述语句相同的行),即使外部和内部选择语句独立工作。这里有什么问题?

谢谢!

4

1 回答 1

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应该在没有和可以忽略不计之间。前者更容易打字。

于 2018-02-15T11:55:27.413 回答