我有一张这样的桌子,有:
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`
答案 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;