SQL问答题
表结构:
1、    表名:g_cardapply
字段(字段名/类型/长度):
g_applyno        varchar   8;//申请单号(关键字)
g_applydate     bigint     8;//申请日期
g_state        varchar     2;//申请状态
2、    表名:g_cardapplydetail
字段(字段名/类型/长度):
g_applyno        varchar     8;//申请单号(关键字)
g_name        varchar     30;//申请人姓名
g_idcard        varchar     18;//申请人身份证号
g_state        varchar     2;//申请状态
其中,两个表的关联字段为申请单号。
题目:
1、    查询身份证号码为440401430103082的申请日期
2、    查询同一个身份证号码有两条以上记录的身份证号码及记录个数
3、    将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
4、    删除g_cardapplydetail表中所有姓李的记录

解决方案 »

  1.   

    1.
    select g_applydate
    from g_cardapply t1 ,g_cardapplydetail t2
    where t1.g_applyno = t2.g_applyno and t2.g_idcard = '440401430103082'
    2.
    select g_idcard,count(1) as 数量 
    from g_cardapplydetail
    group by g_idcard  
    having count(1) > 2
    3.
    update g_cardapplydetail
    set g_state  = '07'
    where g_idcard = '440401430103082'
    update t1
    set t1.g_state  = '07'
    from g_cardapply t1,g_cardapplydetail t2
    where t1.g_applyno = t2.g_applyno and t2.g_idcard = '440401430103082'4.
    delete from g_cardapplydetail where left(g_name,1) = '李'
      

  2.   

    --1.
     select A.g_applydate from g_cardapply A,g_cardapplydetail B where A.g_applyno=B.g_applyno and B.g_idcard='440401430103082'
    --2.
     select * from g_cardapplydetail group by  g_idcard having count(1)>0
    --3.
      update cardapplydetail set g_state='07' from g_cardapply  where g_idcard='440401430103082'
      update g_cardapply set g_state='07' from g_cardapplydetail A , g_cardapply B  where A.g_applyno=B.g_applyno and B.g_idcard='440401430103082'--4.
      delete g_cardapplydetail from g_cardapplydetail where g_name='李'
      

  3.   

    哦!错了点!
    最后一个 忘写 left 了!
      

  4.   


    1.
         select A.g_applydate 
         from g_cardapply g1,g_cardapplydetail g2 
         where g1.g_applyno=g2.g_applyno and g2.g_idcard='440401430103082'
    2.
         select g_idcard,count(1) as 数量 
         from g_cardapplydetail
         group by g_idcard  
         having count(1) > 2
    3.
      (1)update g_cardapplydetail 
         set g_state='07' 
         from g_cardapplydetail  
         where g_idcard='440401430103082'
      (2)update g_cardapply 
         set g_state='07' 
         from g_cardapplydetail g1 , g_cardapply g2  
         where g1.g_applyno=g2.g_applyno and g1.g_idcard='440401430103082'4.
         delete g_cardapplydetail 
         from g_cardapplydetail 
         where g_name like '李%'
      

  5.   

    第一个问题要注意得到的日期要转换格式,因为数据库给出的申请日期是bigint的,同时还要注意身份证重复的现象,不能直接等于了。
    第二个问题应该是看需要那些数据,然后再考虑select后的字段,主要考察的还是having 的用法,以及having必须使用group by子句的问题。
    第三个问题看不出有什么门道。
    第三个问题是怎么叫姓“李”,是不是就是中国习惯上的姓。
      

  6.   

    昨天刚回答这个问题的,我找找看:create table g_cardapply(
    g_applyno nvarchar(8),
    g_applydate bigint,
    g_state nvarchar(2)
    )insert into g_cardapply 
    select 'a001',20050101,'1'
    union all
    select 'a002',20050202,'2'
     create table g_cardapplydetail(
    g_applyno nvarchar(8),
    g_name nvarchar(30),
    g_idcard nvarchar(18),
    g_state nvarchar(2)
    )insert into g_cardapplydetail
    select 'a001','A','440401430103082','1'
    union all
    select 'a002','B','440401430103083','2'
    union all
    select 'a003','B','440401430103083','2'
    union all
    select 'a004','B','440401430103083','2'--question1
    select a.g_applydate from  g_cardapply a
    inner join g_cardapplydetail b on a.g_applyno=b.g_applyno
    and b.g_idcard='440401430103082'--question2
    select g_idcard,count(1) from g_cardapplydetail
    group by g_idcard having count(1)>2--question3
    update g_cardapply set g_state='07' where g_applyno in(
      select g_applyno from  g_cardapplydetail where g_idcard='440401430103082'
    )
    update g_cardapplydetail set g_state='07' where g_idcard='440401430103082'--question4
    delete from g_cardapplydetail where g_name like N'李%'drop table g_cardapply,g_cardapplydetail
      

  7.   

    我觉得第一题怎么都应该用left join 
      

  8.   

    update那句可否用一条语句搞定?什么级联更新的在这里用的上吗?平常做关联的自动更新是怎么做的?
      

  9.   

    SQL问答题
    表结构:
    1、 表名:g_cardapply
    字段(字段名/类型/长度):
    g_applyno varchar 8;//申请单号(关键字)
    g_applydate bigint 8;//申请日期
    g_state varchar 2;//申请状态
    2、 表名:g_cardapplydetail
    字段(字段名/类型/长度):
    g_applyno varchar 8;//申请单号(关键字)
    g_name varchar 30;//申请人姓名
    g_idcard varchar 18;//申请人身份证号
    g_state varchar 2;//申请状态
    其中,两个表的关联字段为申请单号。
    题目:
    1、 查询身份证号码为440401430103082的申请日期select a.g_applydate
    from g_cardapply a
    inner join g_cardapplydetail b
    on a.g_applyno = b.g_applyno
    and b.g_idcard='440401430103082'2、 查询同一个身份证号码有两条以上记录的身份证号码及记录个数
       select g_idcard , count(*) as  cnt
       from g_cardapplydetail
       group by g_idcard
       having count(*) > 23、 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
        update g_cardapplydetail set g_state = '07' 
        where g_idcard = '440401430103082'    update g_cardapply set g_state = '07' 
        from g_cardapply a ,g_cardapplydetail b
        where a.g_applyno = b.g_applyno
        and b.g_idcard='440401430103082'4、 删除g_cardapplydetail表中所有姓李的记录     delete from g_cardapplydetail
         from g_cardapplydetail b , g_cardapply a
         where a.g_applyno = b.g_applyno
         and a.g_name like '李%'
      

  10.   

    2、   查询同一个身份证号码有两条以上记录的身份证号码及记录个数 
       select g_idcard,count(*) as cnt
       from g_cardapplydetail
       group by g_idcard
       having count(*) >2
      

  11.   

    1.查询身份证号码为440401430103082的申请日期     select g_applydate as '申请日期'  from g_cardapply join g_cardapplydetail on g_applyno = g_applyno 
        where g_idcard = 440401430103082

    2.查询同一个身份证号码有两条以上记录的身份证号码及记录个数     select g_idcard '身份证号码' ,count(g_applyno) '个数' from g_cardapplydetail group by  g_idcard having(count(g_applyno))>13.将身份证号码为440401430103082的记录在两个表中的申请状态均改为07 update g_cardapplydetail set g_state = 07 where g_idcard = 440401430103082  --表:g_cardapplydetail update  g_cardapply set g_state = 07 where g_applyno = 
      (select g_applyno from g_cardapplydetail where g_idcard = 440401430103082)
    4.删除g_cardapplydetail表中所有姓李的记录 delete from g_cardapplydetail where g_name like '李%'我也来做做,看做得对不
      

  12.   

    还成吧。算是比较典型的几个sql问题。