为什么我在这个查询中得到NULL?

时间:2011-04-01 21:37:42

标签: mysql

我希望得到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

但是由于极端的内存限制,我无法分开运行查询。如何使单查询版本有效?

3 个答案:

答案 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的行