mysql查询返回' NaN'在不存在的价值观中

时间:2015-11-09 20:17:04

标签: mysql

我有一张这样的桌子,有:

person_id|attr|value
int      |A-Z |int

有许多行具有重复的person_id,但每个person_id使用26个可能值(A-Z)中的每一个作为attr不超过一次。并非所有person_id都涵盖整个A-Z范围。 例如:

1|A|0.2
1|B|0.6
2|Z|0.12

我想在表格中搜索:

select attr, value from table where person_id=1 ...

返回:

A 0.2
B 0.5
C NaN
.
.
Z 25

请注意,将返回总共26行,每个属性对应一行。即使没有行匹配该属性。在此示例中,C返回NaN,因为不存在任何行。

请注意,为简单起见,我使用属性A-Z,但实际上我想获得表中使用的所有唯一属性:

SELECT distinct `attr `FROM `table` 

1 个答案:

答案 0 :(得分:3)

这样做的一种方法是生成如下所示的完整表:

create table alpha (attr char(1) primary key);
insert into alpha values ('A');
insert into alpha values ('B');
insert into alpha values ('C');
insert into alpha values ('D'); 
[...]
insert into alpha values ('Z'); 

然后:

SELECT a.attr, IFNULL(t.value,'NaN') 
FROM alpha a 
LEFT JOIN test t ON a.attr = t.attr AND t.person_id = 1 
ORDER BY a.attr;

在这里演示:http://sqlfiddle.com/#!9/05a76/6/0