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

时间:2018-02-15 10:38:26

标签: sql oracle select subquery sql-subselect

我有两个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语句可以自行运行。这有什么问题?

谢谢!

1 个答案:

答案 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 DISTINCTGROUP BY之间的差异应该介于任何可以忽略不计的范围之间。前者更容易输入。