我在一个表中有一些实体,在另一个中有它们的属性和值。我想创建一个选择,我可以在其中看到每个实体的特定属性的值,如果该属性缺失,则为 null。如何使用标准 SQL 做到这一点?
这是设置:
create table person (id int not null, nick varchar(32) not null);
insert into person (id, nick) values (1, 'John');
insert into person (id, nick) values (2, 'Peter');
create table req_attributes (name varchar(32));
create table person_attributes (id int not null,
person_id int not null,
attribute varchar(32) not null,
value varchar(64) not null);
insert into person_attributes values (1, 1, 'age', '21');
insert into person_attributes values (2, 1, 'hair', 'brown');
insert into person_attributes values (3, 2, 'age', '32');
insert into person_attributes values (4, 2, 'music', 'jazz');
这是我当前的选择语句:
select * from person join person_attributes on
person.id = person_attributes.person_id
where attribute = 'hair';
显然彼得不在结果集中,因为我们没有关于他头发的信息。我也想让他进入结果集,但值为空。
如果结果集像
Person, Hair color
John, brown
Peter, null
如果可能的话,我想避免子查询,但如果不可能使用连接,那么他们是受欢迎的。