我在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“不一样。
有什么想法吗?我错过了什么?我想要做的就是基于“登录”进行重复数据删除。
谢谢!
答案 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
但是,如果您确定idnumber
和middlename
上只有不同的值,那么您最多只能使用这些字段并将其分组。
答案 1 :(得分:0)
您可以通过登录将未完成的表连接到完整的表。然后以编程方式操作结果集。