请大家帮忙看看:我的update语句为什么不能更新ok数据表?

jkx01whg 2010-06-03 04:11:43
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。请问是为什么?
...全文
201 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jkx01whg 2010-06-11
  • 打赏
  • 举报
回复
结贴啦。问题的解决了。
----------------------
两表数据的字段类型都是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了。
jkx01whg 2010-06-04
  • 打赏
  • 举报
回复
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
jkx01whg 2010-06-04
  • 打赏
  • 举报
回复
如下是用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'),
.......略//乱码部分为汉字(分别是姓名和性别)
ACMAIN_CHM 2010-06-04
  • 打赏
  • 举报
回复
(不要高估你的汉语表达能力或者我的汉语理解能力)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

WWWWA 2010-06-04
  • 打赏
  • 举报
回复
将两表用MYSQLDUMP导出,贴出来
jkx01whg 2010-06-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 acmain_chm 的回复:]

SQL code
update ok inner join senior using(senior_num)
set ok.senior_exam_num=senior.senior_exam_num
where ok.senior_exam_num=0
[/Quote]
------------------------
经测试,还是不行。

我又把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);
都会查询出表内的所有记录????
jkx01whg 2010-06-04
  • 打赏
  • 举报
回复
可以用这组来测试嘛:
senior导入的数据是:
233110001,王娟,女,02331240834
233110002,魏静芸,女,02331240330
233110003, 普海银,男,02331240820
233110004,姚勇洁,女,02331240939
......

-----------
ok表导入的数据是:
233180001,王建财,王建财,02331240834,男,,0
233180005,王仙丽,王仙丽,02331240330,女,,0
233180009,者发清,者发清,02331240939,男,,0
233180010,杨静波,杨静波,02331240820,男,,0
ACMAIN_CHM 2010-06-04
  • 打赏
  • 举报
回复
[Quote]数据多,我没全部贴出来。

senior表中有的senior_num记录,是一定存在ok表中的。
但是ok表中有的senior_num记录,在senior表中不一定有。[/Quote]

给出别人能够在自己机器上测试用的数据。否则是浪费双方时间。

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
jkx01whg 2010-06-04
  • 打赏
  • 举报
回复
数据多,我没全部贴出来。

senior表中有的senior_num记录,是一定存在ok表中的。
但是ok表中有的senior_num记录,在senior表中不一定有。
WWWWA 2010-06-04
  • 打赏
  • 举报
回复
用你上述数据测试,
senior_num两表没有匹配记录,当然为0
ACMAIN_CHM 2010-06-03
  • 打赏
  • 举报
回复
update ok inner join senior using(senior_num)
set ok.senior_exam_num=senior.senior_exam_num
where ok.senior_exam_num=0
liaogz2009 2010-06-03
  • 打赏
  • 举报
回复
刚接触,不懂!!!
jkx01whg 2010-06-03
  • 打赏
  • 举报
回复
但是存在一个问题:

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);

两个语句都可以查出许多记录????
jkx01whg 2010-06-03
  • 打赏
  • 举报
回复
两表的记录情况是:

ok表的记录条数多于senior表的条数;
wwwwb 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jkx01whg 的回复:]
有呢

senior_num就是。
[/Quote]
检查两表记录
jkx01whg 2010-06-03
  • 打赏
  • 举报
回复
有呢

senior_num就是。
wwwwb 2010-06-03
  • 打赏
  • 举报
回复
两表是否有相同的KEY字段,检查两表记录
jkx01whg 2010-06-03
  • 打赏
  • 举报
回复
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;
wwwwb 2010-06-03
  • 打赏
  • 举报
回复
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;

检查是否有重复记录

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧