2011-11-16 53 views
0

我试图形成检查重复的用户ID WITHIN TABLE1TABLE2 SQL语句(通过加入表1表2一起发现重复的用户id不应该被记录)SQL检查重复的用户ID

下面是我的表信息,并且我已经实现当前检查:

表1用户标识用户名

表2用户名状态

表3用户名用户名问题

目前我只有一台符合以上3个检查3 SELECT语句并将结果插入到表3:

1. 
    Insert in to Table3(userid,issue) 
     SELECT t1.userid,'check no.1' 
     FROM table1 t1 
     FULL OUTER JOIN table2 t2 ON t1.userid = t2.userid 
     where t1.userid not null and t2.userid is null 
2. 
    Insert in to Table3(userid,issue) 
     SELECT t1.userid,'check no.2' 
     FROM table1 t1 
     inner JOIN table2 t2 ON t1.userid = t2.userid 
     where t2.status = 'DELETE' 

3. 
    Insert in to Table3(userid,issue) 
     SELECT t2.userid,'check no.3' 
     FROM table2 t2 
     right outer JOIN table2 t2 ON t1.userid = t2.userid 
     where t2.status <> 'DELETE' and t1.userid is null 

现在,我想要一个第四SQL查询,它检查重复用户ID表1表2自己内部,不是通过比较2个表在一起,而是每个表单独。

如果发现任何重复,插入记录到表3

ISSUE = '在发现表1重复的用户ID',和

ISSUE =“重复的用户ID发现在表2'

谢谢你们。

+0

这听起来像你的第四个查询应该非常像第二个,只是没有“where”子句 - 不适合你吗? –

+0

在我看来,你需要在单个表中找到重复的用户ID,例如Table1中有两个UserID值为1的值?这些查询是可能的,但这种约束可以通过主键/唯一索引更好地解决。 – SWeko

+0

嗨Jon Skeet,我发现只有在每个* Table1 *和* Table2 *本身内发现重复记录时插入记录的sql查询。因此,这些问题将是'Table1中发现的重复记录'和'Table2中发现的重复记录'。谢谢 – gymcode

回答

1

从你的问题的答案应该是:

insert into table3(userid,issue) 
select t2.userid, 'dup user id'from table1 t1 join table2 t2 
where t1.userid = t2.userid 

但是我不知道,如果你想别的东西archieve。

+0

没有把我的问题弄清楚,我发现只有在每个Table1和Table2本身内找到重复记录时才会插入记录的sql查询,因此,这些问题将是'Ta中找到的重复记录ble1'和'Table2中找到的重复记录'。 – gymcode

+0

你有主键吗?你在用什么数据库? –

+0

SQL Server。我无法设置主键,因为这些* Table1 *和* Table2 *都假设包含外部Excel数据,我将检查每个表内的任何重复的用户标识。如果我设置了主键,那么当我将excel数据导入到数据库时可能会收到错误信息? – gymcode