我希望得到kullnr
的最大值,其中ras
的值是1,2和3.但是当我运行此查询时,我在所有三个上都得到NULL。这是代码:
SELECT MAX( k1.kullnr ) , MAX( k2.kullnr ) , MAX( k3.kullnr )
FROM kull AS k1
JOIN kull AS k2 ON k1.kullnr = k2.kullnr
JOIN kull AS k3 ON k1.kullnr = k3.kullnr
WHERE k1.ras =0
AND k2.ras =1
AND k3.ras =2
如果我运行彼此分开的查询,它们可以正常工作。例如:
SELECT MAX(kullnr) FROM kull WHERE ras=0
但是由于极端的内存限制,我无法分开运行查询。如何使单查询版本有效?
答案 0 :(得分:2)
除非您的所有最大kullnr
字段都具有相同的值,否则您将获得null,因为您已加入要尝试最大化的字段。我认为这更符合您的要求:
SELECT k1.kullnr, k2.kullnr, k3.kullnr
FROM
(SELECT MAX(kullnr) AS kullnr FROM kull WHERE ras = 0) k1,
(SELECT MAX(kullnr) AS kullnr FROM kull WHERE ras = 1) k2,
(SELECT MAX(kullnr) AS kullnr FROM kull WHERE ras = 2) k3
但是,如果我能帮助的话,我真的不认为我会这样做。如果您不需要同一行中的所有最大值,则另一个查询可能是:
SELECT ras, MAX(kullnr)
FROM kull
GROUP BY ras
HAVING ras = 0 OR ras = 1 OR ras = 2
答案 1 :(得分:0)
查看单独的查询
SELECT MAX(kullnr) FROM kull WHERE ras=0
你需要
SELECT MAX(CASE WHEN ras = 0 THEN kullnr END ) ,
MAX(CASE WHEN ras = 1 THEN kullnr END ) ,
MAX(CASE WHEN ras = 2 THEN kullnr END )
FROM kull
WHERE ras IN (0,1,2)
您正在加入kullnr
,因此对于每一行,所有自连接的表将具有该字段的相同值,但您将从该字段的三个表中的每一个中选择max
值。如果JOIN
完全返回任何行,那么max
将在所有3列中相同。
答案 2 :(得分:0)
Martin的查询将为您提供所需的结果。
至于为什么得到null,JOIN条件可能会阻止任何三行的匹配。它们实际上将查询限制为ras = 0,ras = 1和ras = 2
中存在相同kullnr的行