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

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

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

谢谢!

最佳答案

我想不出会发生这种情况的机制。据我所知,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/

相关文章:

sql - 如何在 pyspark 的 postgres jdbc 驱动程序中使用 nextval()?

mysql - 从 SQlite 中选择使用 EPOCH 时间的过去 24 小时

c# - N-Hibernate 中的长字符串与 Oracle 导致错误

mysql - 如何使用单个 SELECT 语句从表中获取多个计数

jquery - 更改/更新选择框

java - Apache Derby 中的 REPLACE 函数

php - php-仅从foreach循环中回显一个类别

database - 如何删除表中在特定时间窗口之间创建的记录?

oracle - 从整个Oracle DB获取DDL的有效方式

sql - 组合 2 个查询 - 在一个查询中获取列名并在另一个查询中使用结果