senior表:
  senior_exam_num char(50) not null
  senior_name char(50) not null
  sex char(4) 
  senior_num char(50) not null key
ok表:
  senior_exam_num char(50)
  senior_name char(50) not null
  sex char(4) 
  senior_num char(50) not null key
......select * from senior where senior_num=02331241030;  //这样的语句可以查询到结果但是
update ok 
set senior_exam_num = (select senior_exam_num from senior where senior_num = ok.senior_num)
where senior_exam_num=0;   //ok表的senior_exam_num先可被更新为0;但是用senior表的senior_exam_num来更新它却得到null。请问是为什么?

解决方案 »

  1.   

    update ok  INNER JOIN senior_exam_num 
    ON senior_exam_num.senior_num = ok.senior_num
    set senior_exam_num = senior_exam_num 
    where senior_exam_num=0;检查是否有重复记录
      

  2.   

    update ok inner join senior
    on senior.senior_num = ok.senior_num
    set ok.senior_exam_num = senior.senior_exam_num
    where ok.senior_exam_num=0;结果为0;
      

  3.   

    两表是否有相同的KEY字段,检查两表记录
      

  4.   

    两表的记录情况是:ok表的记录条数多于senior表的条数;
      

  5.   

    但是存在一个问题:1、select * from senior where senior_num not in (select senior_num from ok);
    2、select * from ok where senior_num not in (select senior_num from senior);两个语句都可以查出许多记录????
      

  6.   

    update ok inner join senior using(senior_num)
    set ok.senior_exam_num=senior.senior_exam_num
    where ok.senior_exam_num=0
      

  7.   

    ------------------------
    经测试,还是不行。我又把senior表中的记录清空后,重新导入,测试以上各位朋友提出的方法,还是不行。请问各位:应从哪几方面去检查两表的记录???
    为什么我执行如下语句:
    1、select * from senior where senior_num not in (select senior_num from ok);
    2、select * from ok where senior_num not in (select senior_num from senior);
    都会查询出表内的所有记录????
      

  8.   

    将两表用MYSQLDUMP导出,贴出来
      

  9.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  10.   

    如下是用mysqldump命令导出的两表信息:
    -- MySQL dump 10.13  Distrib 5.1.46, for Win32 (ia32)
    --
    -- Host: localhost    Database: test
    -- ------------------------------------------------------
    -- Server version 5.1.46-community/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    ........略
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
    -- Table structure for table `senior`
    --DROP TABLE IF EXISTS `senior`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `senior` (
      `senior_exam_num` char(50) NOT NULL,
      `senior_name` char(50) NOT NULL,
      `sex` char(4) DEFAULT NULL,
      `senior_num` char(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
      PRIMARY KEY (`senior_num`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    /*!40101 SET character_set_client = @saved_cs_client */;--
    -- Dumping data for table `senior`
    --LOCK TABLES `senior` WRITE;
    /*!40000 ALTER TABLE `senior` DISABLE KEYS */;
    INSERT INTO `senior` VALUES ('233150001','Âí»Ô','ÄÐ','02331240003\r'),('233150622','ËÕÖª³É','ÄÐ','02331240004\r'),
    .......略//乱码部分为汉字(分别是姓名和性别)-----------------------------------------------------
    -- ------------------------------------------------------
    -- Server version 5.1.46-community/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    ......略
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
    -- Table structure for table `ok`
    --DROP TABLE IF EXISTS `ok`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `ok` (
      `mid_num` char(50) DEFAULT NULL,
      `mid_name` char(50) DEFAULT NULL,
      `senior_name` char(50) NOT NULL,
      `senior_num` char(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
      `sex` char(4) DEFAULT NULL,
      `senior_exam_num` char(50) DEFAULT NULL,
      `detail` char(50) DEFAULT NULL,
      PRIMARY KEY (`senior_num`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    /*!40101 SET character_set_client = @saved_cs_client */;--
    -- Dumping data for table `ok`
    --LOCK TABLES `ok` WRITE;
    /*!40000 ALTER TABLE `ok` DISABLE KEYS */;
    INSERT INTO `ok` VALUES ('230108838','ÕÅÒÕäì','ÕÅÒÕäì','02331240001','ÄÐ',NULL,'0\r'),('230180598','ÎÄ˼ÏÍ','ÎÄ˼ÏÍ','02331240002','ÄÐ',NULL,'תѧ'),('232481588','Âí»Ô','Âí»Ô','02331240003','ÄÐ',NULL,'0\r'),('232780331','ËÕÖª³É','ËÕÖª³É','02331240004','ÄÐ',NULL,'0\r'),('233180001','Íõ½¨²Æ','Íõ½¨²Æ','02331240005','ÄÐ',NULL,'0\r'),
    .......略//乱码部分为汉字(分别是姓名和性别)
      

  11.   

    CREATE TABLE senior(
      senior_exam_num` char(50) NOT NULL,
      senior_name` char(50) NOT NULL,
      sex` char(4) DEFAULT NULL,
      senior_num` char(50)  NOT NULL key
      
    )导入的数据是:
    233110001,王娟,女,02331240834
    233110002,魏静芸,女,02331240330
    233110003,普海银,男,02331240820
    233110004,姚勇洁,女,02331240939
    ......-------------
    CREATE TABLE ok (
      mid_num` char(50) DEFAULT NULL,
      mid_name` char(50) DEFAULT NULL,
      senior_name` char(50) NOT NULL,
      senior_num` char(50) NOT NULL key,
      sex` char(4) DEFAULT NULL,
      senior_exam_num` char(50) DEFAULT NULL,
      detail` char(50) DEFAULT NULL
    )
    导入的数据是:
    233180001,王建财,王建财,02331240005,男,,0
    233180005,王仙丽,王仙丽,02331240006,女,,0
    233180009,者发清,者发清,02331240007,男,,0
    233180010,杨静波,杨静波,02331240008,男,,0
      

  12.   

    用你上述数据测试,
    senior_num两表没有匹配记录,当然为0
      

  13.   

    数据多,我没全部贴出来。senior表中有的senior_num记录,是一定存在ok表中的。
    但是ok表中有的senior_num记录,在senior表中不一定有。
      

  14.   

    可以用这组来测试嘛:
    senior导入的数据是:
    233110001,王娟,女,02331240834
    233110002,魏静芸,女,02331240330
    233110003, 普海银,男,02331240820
    233110004,姚勇洁,女,02331240939
    ......-----------
    ok表导入的数据是:
    233180001,王建财,王建财,02331240834,男,,0
    233180005,王仙丽,王仙丽,02331240330,女,,0
    233180009,者发清,者发清,02331240939,男,,0
    233180010,杨静波,杨静波,02331240820,男,,0
      

  15.   

    结贴啦。问题的解决了。
    ----------------------
    两表数据的字段类型都是char(50)型,数据都是从文本文件里加载,但是:
    ok表中
    select * from ok where senior_num='02331241034'
    语句可以找到记录,而
    senior中
    select * from ok where senior_num='02331241034'
    语句找不到记录,只能用
    select * from ok where senior_num=02331241034
    找到相应的记录
    解决这个问题,就所有问题都解决了。
    ------------------
    解决办法:
    重新整理senior表中记录(select * from senior into outfile...导出),整理成每个fields用双引号引起来的记录,重新加载入senior表,就一切ok了。