客户经常改动表的字段,因此表的字段可以拓展,所以采用下面的设计:
一般我们把一个人员的信息(各个字段),横着记录。现在的设计是竖着放置,也就是每个字段的值
对于一条记录。t_constraction 机构表,定义不同人员的不同字段,如下:
-------------------------------------------------
| PersonType |fieldId | fieldName | … |
--------------------------------------------------
| 开发人员 | 1 | name |
-------------------------------------------------
| 开发人员 | 2 | age |
-------------------------------------------------
| 开发人员 | 3 | emial |
-------------------------------------------------
| 销售人员 | 1 | name |
-------------------------------------------------
| 销售人员 | 2 | level |
-------------------------------------------------t_content 内容表,存放人员的记录,如下:
-------------------------------------------------
| PersonId | fieldId | fieldValue | … |
--------------------------------------------------
| 22 | 1 | 张三 |
--------------------------------------------------
| 22 | 2 | 20 |
--------------------------------------------------
| 22 | 3 | [email protected]|
--------------------------------------------------如何在一条语句中,查询出一个人员(如:personId=22)的信息呢?如同我们使用select name,age,email from 表 where personId=22 这样。有一些字段没有写出来。恳请高手点拨!!
一般我们把一个人员的信息(各个字段),横着记录。现在的设计是竖着放置,也就是每个字段的值
对于一条记录。t_constraction 机构表,定义不同人员的不同字段,如下:
-------------------------------------------------
| PersonType |fieldId | fieldName | … |
--------------------------------------------------
| 开发人员 | 1 | name |
-------------------------------------------------
| 开发人员 | 2 | age |
-------------------------------------------------
| 开发人员 | 3 | emial |
-------------------------------------------------
| 销售人员 | 1 | name |
-------------------------------------------------
| 销售人员 | 2 | level |
-------------------------------------------------t_content 内容表,存放人员的记录,如下:
-------------------------------------------------
| PersonId | fieldId | fieldValue | … |
--------------------------------------------------
| 22 | 1 | 张三 |
--------------------------------------------------
| 22 | 2 | 20 |
--------------------------------------------------
| 22 | 3 | [email protected]|
--------------------------------------------------如何在一条语句中,查询出一个人员(如:personId=22)的信息呢?如同我们使用select name,age,email from 表 where personId=22 这样。有一些字段没有写出来。恳请高手点拨!!
order by fieldID
max(decode fieldId,1,fieldValue,null) as name,
max(decode fieldId,2,fieldValue,null) as age,
max(decode fieldId,3,fieldValue,null) as email
from t_content
where PersonId=22
那你得都用标准sql的了,比如oracle的如果用了decode,就要改成case when。而且很多函数都不能用的麻烦哟。
还是提供几个不同版本的存储过程来实现吧。这样代码不用改了
1.建表结构如下:
create table M
(
USER_ID VARCHAR2(10),
FIELD_NAME VARCHAR2(10),
FIELD_VALUE VARCHAR2(10)
);2.sql
select user_id,wm_concat(field_name||':'||field_value)
from m
group by user_id;