第一个表student(id,bedcost,bedid) 
第二个表bed(bedid,flatid) 
第三个表flat(flatid,cost) 把第二个表里的bedid和第三个表里的cost分别加入到student表里的bedid、bedcost字段。 先把bedid插入到student里, 
然后在根据 bedid查找到flat.cost ,将其放入student里的bedcost里。呵呵
条件 where id=1111111 and bedid=2222222; 
我对数据库太过敏了。谢谢大家 

解决方案 »

  1.   

    insert into student (bedcost,bedid)
    select  cost,bedid
    from bed,flat
    where bed.flatid=flat.flatid建议你能你的数据贴出来,说实话,你描述得并不清楚。
      

  2.   

    建议你提供测试用例。比如
    bed
    bedid,flatid
    1       2
    2       7
    1       4flat
    flatid,cost
    2    30
    4    30然后结果是什么?
      

  3.   


    我把表结构贴出来吧。我都不知道要怎么弄
    flag表
    student
    bed
      

  4.   


    我就是要把bed里的BEDID
    和flag理的cost
    放到student里的bedid、和bedcost里面。呵呵
      

  5.   

    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for bed
    -- ----------------------------
    DROP TABLE IF EXISTS `bed`;
    CREATE TABLE `bed` (
      `bedid` int(11) NOT NULL,
      `flatid` int(11) NOT NULL,
      `classid` int(11) DEFAULT NULL,
      `arrange` varchar(10) DEFAULT NULL,
      PRIMARY KEY (`bedid`),
      KEY `flatid` (`flatid`),
      CONSTRAINT `flatid` FOREIGN KEY (`flatid`) REFERENCES `flat` (`flatid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
    -- ----------------------------
    -- Table structure for flat
    -- ----------------------------
    DROP TABLE IF EXISTS `flat`;
    CREATE TABLE `flat` (
      `flatid` int(11) NOT NULL,
      `borg` varchar(10) NOT NULL,
      `cost` int(11) NOT NULL,
      PRIMARY KEY (`flatid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;- ----------------------------
    -- Table structure for student
    -- ----------------------------
    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student` (
      `id` int(50) NOT NULL,
      `name` varchar(50) NOT NULL,
      `sex` varchar(50) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `address` varchar(50) DEFAULT NULL,
      `phone` varchar(50) DEFAULT NULL,
      `bedid` int(50) DEFAULT '0',
      `bedcost` int(11) DEFAULT NULL,
      `registered` varchar(10) DEFAULT NULL,
      `spending` int(11) DEFAULT NULL,
      `spent` int(11) DEFAULT '0',
      `classid` int(11) DEFAULT NULL,
      `userid` int(11) DEFAULT NULL,
      `date` varchar(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `bedid` (`bedid`),
      KEY `userid` (`userid`),
      KEY `classid` (`classid`),
      CONSTRAINT `bedid` FOREIGN KEY (`bedid`) REFERENCES `bed` (`bedid`),
      CONSTRAINT `classid` FOREIGN KEY (`classid`) REFERENCES `class` (`classid`),
      CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
      

  6.   


    INSERT INTO `bed` VALUES ('0', '1', '10101', '');
    INSERT INTO `bed` VALUES ('1', '2', '10101', 'Y');
    INSERT INTO `bed` VALUES ('2', '1', '30201', 'Y');
    INSERT INTO `bed` VALUES ('3', '2', '30201', 'Y');
    INSERT INTO `bed` VALUES ('4', '4', '30201', 'Y');
    INSERT INTO `bed` VALUES ('33', '2', '30202', 'Y');
    INSERT INTO `bed` VALUES ('44', '3', '10202', 'N');
    INSERT INTO `bed` VALUES ('234', '0', '30202', 'N');
    INSERT INTO `flat` VALUES ('0', 'null', '0');
    INSERT INTO `flat` VALUES ('1', '男', '1111');
    INSERT INTO `flat` VALUES ('2', '女', '2222');
    INSERT INTO `flat` VALUES ('3', '男', '3333');
    INSERT INTO `flat` VALUES ('4', '女', '4444');INSERT INTO `student` VALUES ('91010101', '丁乙甲', '男', '21', '通化', '13900000000', '0', null, 'N', '2000', '3111', '10101', null, '2009');
    INSERT INTO `student` VALUES ('91010102', '索春龙', '男', '22', '安徽', '13910000000', '0', null, 'N', '2000', '3311', '10101', null, '2009');
    INSERT INTO `student` VALUES ('91010103', '刘莉莉', '女', '22', '白城', '13920000000', '0', null, 'N', '2000', '0', '10101', null, '2009');
    INSERT INTO `student` VALUES ('91010104', '隋鑫', '女', '22', '松原', '13930000000', '1', null, 'N', '2000', '0', '10101', null, '2009');
    INSERT INTO `student` VALUES ('91010201', '河江山', '男', '20', '陕西', '13800000000', '22223', null, 'Y', '2000', '3111', '10102', null, '2009');
    INSERT INTO `student` VALUES ('91010202', '祝立业', '男', '20', '长春', '13800000000', '0', null, 'N', '2000', '0', '10102', null, '2009');
    INSERT INTO `student` VALUES ('91010203', '姚桂娇', '女', '23', '长春', '13800000000', '0', null, 'N', '2000', '0', '10102', null, '2009');
      

  7.   

    mysql> select * from bed;
    +-------+--------+---------+---------+
    | bedid | flatid | classid | arrange |
    +-------+--------+---------+---------+
    |     0 |      1 |   10101 |         |
    |     1 |      2 |   10101 | Y       |
    |     2 |      1 |   30201 | Y       |
    |     3 |      2 |   30201 | Y       |
    |     4 |      4 |   30201 | Y       |
    |    33 |      2 |   30202 | Y       |
    |    44 |      3 |   10202 | N       |
    |   234 |      0 |   30202 | N       |
    +-------+--------+---------+---------+
    8 rows in set (0.00 sec)mysql> select * from flat;
    +--------+------+------+
    | flatid | borg | cost |
    +--------+------+------+
    |      0 | null |    0 |
    |      1 | 男   | 1111 |
    |      2 | 女   | 2222 |
    |      3 | 男   | 3333 |
    |      4 | 女   | 4444 |
    +--------+------+------+
    5 rows in set (0.00 sec)mysql> select * from student;
    +----------+--------+------+------+---------+-------------+-------+---------+------------+----------+-------+---------+--------+------+
    | id       | name   | sex  | age  | address | phone       | bedid | bedcost | registered | spending | spent | classid | userid | date |
    +----------+--------+------+------+---------+-------------+-------+---------+------------+----------+-------+---------+--------+------+
    | 91010101 | 丁乙甲 | 男   |   21 | 通化    | 13900000000 |     0 |    NULL | N          |     2000 |  3111 |   10101 |   NULL | 2009 |
    | 91010102 | 索春龙 | 男   |   22 | 安徽    | 13910000000 |     0 |    NULL | N          |     2000 |  3311 |   10101 |   NULL | 2009 |
    | 91010103 | 刘莉莉 | 女   |   22 | 白城    | 13920000000 |     0 |    NULL | N          |     2000 |     0 |   10101 |   NULL | 2009 |
    | 91010104 | 隋鑫   | 女   |   22 | 松原    | 13930000000 |     1 |    NULL | N          |     2000 |     0 |   10101 |   NULL | 2009 |
    | 91010201 | 河江山 | 男   |   20 | 陕西    | 13800000000 | 22223 |    NULL | Y          |     2000 |  3111 |   10102 |   NULL | 2009 |
    | 91010202 | 祝立业 | 男   |   20 | 长春    | 13800000000 |     0 |    NULL | N          |     2000 |     0 |   10102 |   NULL | 2009 |
    | 91010203 | 姚桂娇 | 女   |   23 | 长春    | 13800000000 |     0 |    NULL | N          |     2000 |     0 |   10102 |   NULL | 2009 |
    +----------+--------+------+------+---------+-------------+-------+---------+------------+----------+-------+---------+--------+------+
    7 rows in set (0.00 sec)
    基于这些记录,你期望的结果是什么? 比如下面这些记录中的 bedid, bedcost 应该是多少?我全帮更新为 1,1111 行不行,如果不行为什么?正确的结果是什么?
    mysql> select id,name,sex,bedid,bedcost
        -> from student;
    +----------+--------+------+-------+---------+
    | id       | name   | sex  | bedid | bedcost |
    +----------+--------+------+-------+---------+
    | 91010101 | 丁乙甲 | 男   |     0 |    NULL |
    | 91010102 | 索春龙 | 男   |     0 |    NULL |
    | 91010103 | 刘莉莉 | 女   |     0 |    NULL |
    | 91010104 | 隋鑫   | 女   |     1 |    NULL |
    | 91010201 | 河江山 | 男   | 22223 |    NULL |
    | 91010202 | 祝立业 | 男   |     0 |    NULL |
    | 91010203 | 姚桂娇 | 女   |     0 |    NULL |
    +----------+--------+------+-------+---------+
    7 rows in set (0.00 sec)mysql>
      

  8.   

    +----------+--------+------+-------+---------+
    | id       | name   | sex  | bedid | bedcost |
    +----------+--------+------+-------+---------+
    | 91010101 | 丁乙甲 | 男   |    44 |    4444 |
    | 91010102 | 索春龙 | 男   |     0 |    NULL |
    | 91010103 | 刘莉莉 | 女   |     0 |    NULL |
    | 91010104 | 隋鑫   | 女   |     1 |    NULL |
    | 91010201 | 河江山 | 男   | 22223 |    NULL |
    | 91010202 | 祝立业 | 男   |     0 |    NULL |
    | 91010203 | 姚桂娇 | 女   |     0 |    NULL |
    +----------+--------+------+-------+---------+
    床位编号(bedid)是随便安排给student的。只要 公寓类型flat.borg与student性别相符就可以然后把相应床位所对应的 cost 赋值给student的bedcost就可以~~~
    比如说第一个丁乙甲同学
    输入一个床位 44安排给他,把bed 表里的bedid给了丁乙甲的 bedid
    然后通过安排的床位找到 该床位的公寓号(flatid)通过该flatid找到这公寓的价格cost 4444元。
    把4444赋值给 student丁乙甲的bedcost里面。呵呵呵
    好像有点乱乱的
    不过我自己知道 怎么回事。就是描述不清
      

  9.   

    你这个不是一个SQL的问题,包含两步。1。床位的分配。这个建议你直接用程序解决。 要考虑的东西很多,(如果床位不够的情况下怎么办?等等)
    2。每个student床位分配好后的cost倒是容易。直接
    update student,
    bed inner join flat using (flatid)
    set student.bedcost=flat.cost
    where student.bedid=bed.bedid;
      

  10.   


    我把业务流程弄出来吧。要不太乱了床位录入insert into bed (bedid, flatid,classid,arrange) values(" 编号(手动输入的值) ","
    公寓编号flatid(从flat里count的) "," +班级代码classid(从班级表里count的) ",'N(为安排默认值是N)')";获得床位的sql快
    select bed.*, flat.* from bed, flat where bed.flatid = flat.flatid and flat.borg = '女' and bed.arrange = 'N' and bed.classid=30201 (按照班级和性别来获得床位,目的是让一个班级的同学都在一个公寓,并且男女在不同的公寓)选择之后对数据库更新//对sutdent表更新
    "update student set bedid =" + object.getStudent().getBedid() + " where id="+ object.getStudent().getId();
    object.getStudent().getBedid() ——————为同学选择的床位bedid
    object.getStudent().getId();——————-学生的学号//对bed更新
    "update bed set arrange ='Y' where bedid=" + object.getStudent().getBedid();//更新bed表里的安排状态把N 改成no
    //对student里的bedcost、更新我需要的就是这个语句。
    "update student set bedcost   
      

  11.   


    哈哈。我想我需要的就是这个sql
    谢谢您。我去试试程序。。太谢谢你了