有2张表,一张person_info 记录 省市 教师 创建人 修改人 创建时间 修改时间
另一张user_zhongxin 记录 用户 中心现在要查询 省市 中心 用户 创建信息个数 修改信息个数对于一条记录来说,新建的时候创建时间=修改时间,修改后,修改时间>新建时间,创建人和修改人可以是不同的人.请问我要如何写sql语句呢?下面是建表的语句
CREATE TABLE PERSON_INFO (
PERSON_ID INTEGER NOT NULL ,
PERSON_NAME VARCHAR(30) NOT NULL ,
CREATE_NAME VARCHAR(30) NOT NULL ,
CREATE_TIME DATE NOT NULL ,
MODIFY_NAME VARCHAR(30) NOT NULL ,
MODIFY_TIME DATE NOT NULL ,
PROVINCE_NAME VARCHAR2(20)
);
ALTER TABLE PERSON_INFO
ADD PRIMARY KEY
(PERSON_ID);
INSERT INTO PERSON_INFO VALUES(1,'pa','人员a',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-01','yyyy-mm-dd'),'河北');
INSERT INTO PERSON_INFO VALUES(2,'pb','人员b',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-03','yyyy-mm-dd'),'北京');
INSERT INTO PERSON_INFO VALUES(3,'pc','人员c',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-05','yyyy-mm-dd'),'河南');
INSERT INTO PERSON_INFO VALUES(4,'pd','人员d',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-07','yyyy-mm-dd'),'山西');
INSERT INTO PERSON_INFO VALUES(5,'pe','人员e',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-09','yyyy-mm-dd'),'辽宁');
CREATE TABLE USER_INFO (
U_ID INTEGER NOT NULL ,
U_NAME VARCHAR(30) NOT NULL ,
U_MAIN_NAME VARCHAR(30) NOT NULL );
ALTER TABLE USER_INFO
ADD PRIMARY KEY
(U_ID); INSERT INTO USER_INFO VALUES(1,'用户a','理工中心');
INSERT INTO USER_INFO VALUES(2,'用户b','中职中心');
INSERT INTO USER_INFO VALUES(3,'用户c','教研中心');
INSERT INTO USER_INFO VALUES(4,'用户d','理工中心');
另一张user_zhongxin 记录 用户 中心现在要查询 省市 中心 用户 创建信息个数 修改信息个数对于一条记录来说,新建的时候创建时间=修改时间,修改后,修改时间>新建时间,创建人和修改人可以是不同的人.请问我要如何写sql语句呢?下面是建表的语句
CREATE TABLE PERSON_INFO (
PERSON_ID INTEGER NOT NULL ,
PERSON_NAME VARCHAR(30) NOT NULL ,
CREATE_NAME VARCHAR(30) NOT NULL ,
CREATE_TIME DATE NOT NULL ,
MODIFY_NAME VARCHAR(30) NOT NULL ,
MODIFY_TIME DATE NOT NULL ,
PROVINCE_NAME VARCHAR2(20)
);
ALTER TABLE PERSON_INFO
ADD PRIMARY KEY
(PERSON_ID);
INSERT INTO PERSON_INFO VALUES(1,'pa','人员a',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-01','yyyy-mm-dd'),'河北');
INSERT INTO PERSON_INFO VALUES(2,'pb','人员b',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-03','yyyy-mm-dd'),'北京');
INSERT INTO PERSON_INFO VALUES(3,'pc','人员c',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-05','yyyy-mm-dd'),'河南');
INSERT INTO PERSON_INFO VALUES(4,'pd','人员d',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-07','yyyy-mm-dd'),'山西');
INSERT INTO PERSON_INFO VALUES(5,'pe','人员e',to_date('2010-04-01','yyyy-mm-dd'),'a',to_date('2010-04-09','yyyy-mm-dd'),'辽宁');
CREATE TABLE USER_INFO (
U_ID INTEGER NOT NULL ,
U_NAME VARCHAR(30) NOT NULL ,
U_MAIN_NAME VARCHAR(30) NOT NULL );
ALTER TABLE USER_INFO
ADD PRIMARY KEY
(U_ID); INSERT INTO USER_INFO VALUES(1,'用户a','理工中心');
INSERT INTO USER_INFO VALUES(2,'用户b','中职中心');
INSERT INTO USER_INFO VALUES(3,'用户c','教研中心');
INSERT INTO USER_INFO VALUES(4,'用户d','理工中心');
用户表插入数据INSERT INTO USER_INFO VALUES(1,'人员a','理工中心');
INSERT INTO USER_INFO VALUES(2,'人员b','中职中心');
INSERT INTO USER_INFO VALUES(3,'人员c','教研中心');
INSERT INTO USER_INFO VALUES(4,'人员d','理工中心');
PERSON_ID=U_ID?
创建信息个数:
select a.create_name,count(*) create_count from PERSON_INFO a,USER_INFO b where a.create_name=b.u_name group by a.create_name;
修改信息个数:
select a.modify_name,count(*) modify_count from PERSON_INFO a,USER_INFO b where a.modify_time>a.create_time and a.modify_name=b.u_name group by a.modify_name;但是你提供的修改人员在USER_INFO会有不存在的情况。
我可以获得各个数量.
我现在是这么做的:先获取创建个数,再获取修改个数,然后2个左连接,右链接.因为我发现oracle的full join貌似有bug
然后再联合user_zhongxin表将中心对应上,最后用rollup函数统计
如果修改人不在USER_INFO,也要统计到,第二个查询就要改成:
select a.modify_name,count(*) modify_count from PERSON_INFO a where a.modify_time>a.create_time group by a.modify_name;总之你要的结果就是使用子查询作为一个临时表来解决,但是还是觉得你们的表结构设计的不合理,怎么用名字作为关联的
但是用id最后还是要联合一下查出名称,我担心速度会更慢
名字在系统里也是唯一的
有点眩晕。。