从多个表中选择,删除重复项

时间:2012-04-03 04:47:57

标签: sql sqlite

我在SQLite DB中有两个表,它们都有以下字段:

idnumber,firstname,middlename,lastname,email,login

一个表填充了所有这些,另一个表没有填充idnumber或中间名。

我希望能够做到这样的事情:

select idnumber, firstname, middlename, lastname, email, login 
from users1,users2 group by login;

但是我得到了一个“含糊不清”的错误。做类似的事情:

select idnumber, firstname, middlename, lastname, email, login from users1 
union 
select idnumber, firstname, middlename, lastname, email, login from users2;

看起来它有效,但我看到重复。我的理解是联盟不应该允许重复,但也许它们不是真正的重复,因为第二个用户表没有填充所有字段(例如“20,bob,alan,smith,bob @ bob.com,bob “与”NULL,bob,NULL,smith,bob @ bob.com,bob“不一样。

有什么想法吗?我错过了什么?我想要做的就是基于“登录”进行重复数据删除。

谢谢!

2 个答案:

答案 0 :(得分:2)

正如您所说union将删除重复记录(请注意union all不会!)。当所有列值匹配时,两个记录被视为重复。在您在问题中考虑的示例中,很明显NULL不等于20'alan',因此这些记录不会被视为重复。

修改

  

[...]我能想到的唯一方法是创建一个新表[...]

这不是必要的。我想你可以做到以下几点:

select login, max(idnumber), max(firstname), max(middlename), max(lastname),
  max(email) from (
    select idnumber, firstname, middlename, lastname, email, login from users1 
    union 
    select idnumber, firstname, middlename, lastname, email, login from users2
) final
group by login

但是,如果您确定idnumbermiddlename上只有不同的值,那么您最多只能使用这些字段并将其分组。

答案 1 :(得分:0)

您可以通过登录将未完成的表连接到完整的表。然后以编程方式操作结果集。