• 7647阅读
  • 8回复

如何知道MySQL里2个不同表内有相同的数据 [复制链接]

上一主题 下一主题
离线9605201
 
只看楼主 正序阅读 楼主  发表于: 2009-01-19
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
如何知道MySQL里2个不同表内有相同的数据

有A与B 2个表
只要符合其中3个字段以上数据相同的A的这条数据就不写入B
如果没有相同,A就写入B
然后读取A的下一条数据 继续比较 重复上面操作
离线demowolf

只看该作者 8楼 发表于: 2009-02-09
  QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动
    db.setHostName("192.168.1.106");
    db.setDatabaseName("mydb"); // 我们之前建立的数据库
    db.setUserName("root"); // 我们创建的 yunfan 用户名
    db.setPassword("1234"); // yunfan 用户的密码
    bool ok = db.open(); // 尝试连接数据库
    if(ok)
    {
        qWarning("ok");
    }
    else
    {
        qWarning("not ok");
        return;
    }

QSqlQuery query;
    query.prepare("insert into `UserInfo`(`id`,`name`,`sexual`,`province`,`city`,`age`,`qq`,`email`,`comment`,`msn`,`phone`) values ( '3','fdasd','1','jiangsu','nanjing','18','11007732','kof@126.com','fdsafdsafadsf','jiang@hotmail.com','15902144076');");
    query.exec();
    while(query.next())
    {
    db.close();
    }

大家帮忙看看,我想一次性插入很多条数据到一个表里面。可是我在MYSQL的GUI管理程序里,发现的LOG如下:
update `UserInfo` set `id`='1',`name`='Bart',`sexual`='1',`province`='2',`city`=NULL,`age`=NULL,`qq`=NULL,`email`=NULL,`comment`=NULL,`msn`=NULL,`phone`=NULL where `id`='1';

也就是说,他只插入了前面的3个值,这是为什么啊?上面的执行语句,也是我先GUI编辑,然后把对应的SQL语句复制下来的,SQL语句应该没有问题。

还有就是,我试着改插入数据的内容,可是我每次改,都没效果,每次执行,都是把第一次插入的3个数值的内容插进去了,我改内容,好歹他也跟着改那3个内容啊,可是却不改。可急死我了。

大侠帮忙解决啊
离线wvins
只看该作者 7楼 发表于: 2009-02-08
select * from
a left join b
on ((a.key = b.key) or (a.key is null and b.key is null))   
--按主键连接,如果多个主键则用and连接
--这里主键指逻辑主键
--另外不考虑表有完全相同记录的情况(这本身就不合理)
where b.key is not null
--选择b.key不是null的记录,也就是重复记录
=======================================
凭记忆写的,一些细节可能会有点出入,
离线9605201
只看该作者 6楼 发表于: 2009-02-06
有Join或者Exists的例子吗?
离线wvins
只看该作者 5楼 发表于: 2009-01-20
使用Join或者Exists都能够做到
离线9605201
只看该作者 4楼 发表于: 2009-01-20
CREATE TABLE `accounts` (
  `acct` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID',
  `login` varchar(32) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Login username',
  `password` varchar(32) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Login password',
  `encrypted_password` varchar(42) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `email` varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'Contact e-mail address',
  `flags` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT 'Client flags',
  PRIMARY KEY (`acct`),
  UNIQUE KEY `login` (`login`),
  UNIQUE KEY `acct` (`acct`)
) ENGINE=MyISAM AUTO_INCREMENT=3294833 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Account Information';

主要查询login判断是否存在
离线sundp

只看该作者 3楼 发表于: 2009-01-20
你表的字段有多少个?
最好能把实际结构写出来让大家看看。
人境结庐<http://sundp70.blog.163.com>心远地偏
离线9605201
只看该作者 2楼 发表于: 2009-01-19
用主键解决不了
离线wd007

只看该作者 1楼 发表于: 2009-01-19
干嘛不设置主键来判断呢
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
快速回复
限100 字节
 
上一个 下一个