怎样把mysql 当中两个项当中重复字段(3个字姓名)的整条记录删除
我有一个MYSQL数据库数据字段主要是人的姓名与地址,还有其它信息姓名乡镇地址电话号码姓名2张小三A镇XXXX12345李四黄大山B镇XXXX12344张小三李小明B镇X...
我有一个MYSQL数据库 数据字段主要是人的姓名与地址,还有其它信息
姓名 乡镇 地址 电话号码 姓名2
张小三 A镇 XXXX 12345 李四
黄大山 B镇 XXXX 12344 张小三
李小明 B镇 XXXX 34454 黄五五
周小东 C镇 XXXX 33242 张小强
黄五五 X镇 XXXX 33434 李东东
怎样用MYSQL 把列“姓名2”中的每一个字段与列“姓名”中的每一个字段作比较,把当中两个列重复字段的整一条记录删除
如例子当中的两条记录就需要删除了
张小三 A镇 XXXX 12345
黄五五 X镇 XXXX 33434 展开
姓名 乡镇 地址 电话号码 姓名2
张小三 A镇 XXXX 12345 李四
黄大山 B镇 XXXX 12344 张小三
李小明 B镇 XXXX 34454 黄五五
周小东 C镇 XXXX 33242 张小强
黄五五 X镇 XXXX 33434 李东东
怎样用MYSQL 把列“姓名2”中的每一个字段与列“姓名”中的每一个字段作比较,把当中两个列重复字段的整一条记录删除
如例子当中的两条记录就需要删除了
张小三 A镇 XXXX 12345
黄五五 X镇 XXXX 33434 展开
3个回答
展开全部
最后给你定下的删除语法为:
delete a from 表 a,表 b where a.姓名=b.姓名2 ;
楼上的我觉得你对事务应该了解的不够吧,在一个事务里边删除记录并不是一行一行提交的,而是一起提交的,所以用这种方式完全可以删除,我已经测试通过了!
下面是测试代码:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: wxg
Target Host: localhost
Target Database: wxg
Date: 2010-06-04 12:23:36
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for 表
-- ----------------------------
CREATE TABLE `表` (
`姓名` varchar(20) default NULL,
`姓名2` varchar(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `表` VALUES ('张小三', '李四');
INSERT INTO `表` VALUES ('黄大山', '张小三');
INSERT INTO `表` VALUES ('李小明', '黄五五');
INSERT INTO `表` VALUES ('周小东', '张小强');
INSERT INTO `表` VALUES ('黄五五', '李东东');
delete a from 表 a,表 b where a.姓名=b.姓名2 ;
这样会删除两行
delete a from 表 a,表 b where a.姓名=b.姓名2 ;
楼上的我觉得你对事务应该了解的不够吧,在一个事务里边删除记录并不是一行一行提交的,而是一起提交的,所以用这种方式完全可以删除,我已经测试通过了!
下面是测试代码:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: wxg
Target Host: localhost
Target Database: wxg
Date: 2010-06-04 12:23:36
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for 表
-- ----------------------------
CREATE TABLE `表` (
`姓名` varchar(20) default NULL,
`姓名2` varchar(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `表` VALUES ('张小三', '李四');
INSERT INTO `表` VALUES ('黄大山', '张小三');
INSERT INTO `表` VALUES ('李小明', '黄五五');
INSERT INTO `表` VALUES ('周小东', '张小强');
INSERT INTO `表` VALUES ('黄五五', '李东东');
delete a from 表 a,表 b where a.姓名=b.姓名2 ;
这样会删除两行
展开全部
我觉得前面几个人的方法都有漏洞
如果有数据
张小三 A镇 XXXX 12345 李四
黄大山 B镇 XXXX 12344 张小三
李小明 B镇 XXXX 34454 黄大山
这样如果第二条和第一条删掉后第三条就删不掉了
如果这样就要通过程序来控制了,而不是简单的用sql语句可以做到了
先select
然后通过程序循环删除吧
如果有数据
张小三 A镇 XXXX 12345 李四
黄大山 B镇 XXXX 12344 张小三
李小明 B镇 XXXX 34454 黄大山
这样如果第二条和第一条删掉后第三条就删不掉了
如果这样就要通过程序来控制了,而不是简单的用sql语句可以做到了
先select
然后通过程序循环删除吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete
from table
where 姓名 in
(select 姓名2 from table) ??
随便写的 不知道对不对
主要意思就是把先把姓名2这一列查询出来,然后从表的第一行开始逐行检查姓名中的字段名是否出现在姓名2这个集合中,若是,则删除整行数据。
from table
where 姓名 in
(select 姓名2 from table) ??
随便写的 不知道对不对
主要意思就是把先把姓名2这一列查询出来,然后从表的第一行开始逐行检查姓名中的字段名是否出现在姓名2这个集合中,若是,则删除整行数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询