xzb_97
2009-08-31 14:40
浏览 253
已采纳

请教一个插入的sql语句!

task表中现有数据:
pid id parentid name start finish
2000 5743 0 2000年数据1 2009-8-27 2009-8-27

2000 5744 5743 2000年数据2 2009-8-27 2009-8-29

sequence表中:
type 2744

当我需要插入这样的新数据时(比如是2009年8月28号插入的):
子件号 父件号 周期
2001年数据1 1天
2001年数据2 2001年数据1 4天

该怎么实现才能插入上面的新数据后task表中的数据如下:

pid id parentid name start finish
2000 5743 0 2000年数据1 2009-8-27 2009-8-27

2000 5744 5743 2000年数据2 2009-8-27 2009-8-27
2001 5745 0 2001年数据1 2009-8-28 2009-8-29
2001 5746 5745 2001年数据2 2009-8-28 2009-9-1

2001的id号是取sequence表type+1,然后将后面的数据id值依次变成新值,请教!
[b]问题补充:[/b]
谢谢关注,三个回复:
1. 我用的数据库是sqlserver2000
2. 数据库中与start和finish的类型是日期型(也就是date).
3.数据是从数据库里另一个表获得的。
[b]问题补充:[/b]
请教各位高手!
[b]问题补充:[/b]
可是id和parentid怎么写sql语句才能实现呢?
[b]问题补充:[/b]
十分感谢你的回复,有个问题请教一下:我将id+1后,这时候要改变parentuid的值,是根据什么条件呢? update parentuid=id from task where name='2001年数据1' 可我是一万条数据的插入?会不会在效率上太差了?
[b]问题补充:[/b]
谢谢你提供的思路,那如果我一次插入一万条数据,在task上建立name的索引,能达到比较好的效率吗?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • walsh_bupt 2009-09-01 18:56
    已采纳

    我将id+1后,这时候要改变parentuid的值,是根据什么条件呢?

    你先从下面这个表中读取一行数据吧:
    [quote]子件号 父件号 周期
    2001年数据1 1天
    2001年数据2 2001年数据1 4天 [/quote]

    假如读取的就是第一行数据,通过第一行数据的父件号为空,可知该行数据没有父件号,那么在你插入的时候,parentuid就是0了;

    然后读取第二行数据吧,第二行数据的父件号是“2001年数据1 ”,那你就可以用该值去你要插入的那个表中查找name等于“2001年数据1”的哪行记录呀,返回该行记录的id,这个id即为你要插入的这行数据的parentid ;

    对于你说的效率,你可以优化你的SQL语句,或者在task上建立name的索引。

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • walsh_bupt 2009-08-31 15:09

    需要问楼主三个问题,才能回答:

    1、你用的数据库
    2、数据库中与start和finish的类型,是日期型,还是字符串型
    3、下边的数据是从那获取的,是数据库,还是就是你手写的

    [quote]子件号 父件号 周期
    2001年数据1 1天
    2001年数据2 2001年数据1 4天 [/quote]

    评论
    解决 无用
    打赏 举报
  • walsh_bupt 2009-09-01 13:47

    从另外两张表中获取,要插入的数据,然后一块插入不就行了。

    对于日期,用dateadd()函数就可以了

    评论
    解决 无用
    打赏 举报
  • walsh_bupt 2009-09-01 14:51

    首先读取sequence表,获取type,然后加1 不就获取id了吗

    然后读取:下面这个表
    [quote]子件号 父件号 周期
    2001年数据1 1天
    2001年数据2 2001年数据1 4天 [/quote]

    读取之后,第一记录,通过第一个字段可以获取你的pid把,然后通过第二个字段“父件号”因为为空,所以对应要插入的记录的parentid就是0

    读取第一条时,通过父件号,“2001年数据1”,然后在再查你要插入的那个表,不就获取parentid 了吗

    评论
    解决 无用
    打赏 举报
  • walsh_bupt 2009-09-01 23:24

    应该可以的

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题