由于您已将其标记为 MySQL,因此您可以通过多种方式获得灵活的数据库表。您可以创建一个包含名称-值-对的表,类似于:
create table YourTable
(
id int,
name varchar(50),
attribute varchar(50),
value varchar(50)
);
insert into yourtable
values(1, 'Scott', 'DOB', '07/01/2012'),
(1, 'Scott', 'Address 1', '2222 Jackson'),
(1, 'Scott', 'Health', 'Good'),
(1, 'Scott', 'Expertise Level', 'High'),
(1, 'Scott', 'Contact Info', '408-555-5555');
这也称为Entity-Attribute-Value
. 使用这种类型的结构有利也有弊。
为了查询此数据,您必须执行多个连接,或者您可以旋转数据以将其放入列中。
这是关于 DBA.SE 的一个问题,它概述了这种类型的结构 (EAV)。
您可以使用带有CASE
语句的聚合函数查询数据:
select id,
name,
max(case when attribute = 'DOB' then value end) DOB,
max(case when attribute = 'Address 1' then value end) Address1,
max(case when attribute = 'Health' then value end) Health
from yourtable
group by id, name;
如果您想执行多个连接,则查询将类似于以下内容:
select t1.id,
t1.name,
t1.value DOB,
t2.value Address1,
t3.value Health
from yourtable t1
left join yourtable t2
on t1.id = t2.id
and t1.name = t2.name
and t2.attribute='Address 1'
left join yourtable t3
on t1.id = t3.id
and t1.name = t3.name
and t3.attribute='Health'
where t1.attribute = 'DOB';
请参阅带有数据检索演示的 SQL Fiddle 。