从sqlite表中的行中删除重复元素

时间:2015-02-18 12:23:42

标签: c sqlite

如果有任何疑问,请在一行中删除重复的条目,请告诉我。

例如:我有一张名为9个电话号码的表格:

Name     Tel0  Tel1  Tel2  Tel3  Tel4  Tel5  Tel6  Tel7  Tel8

John       1      2     2     2    3     3     4     5      1

最终结果应如下所示:

Name     Tel0  Tel1  Tel2  Tel3  Tel4  Tel5  Tel6  Tel7  Tel8

John      1      2    3     4     5      

问候    麦迪

1 个答案:

答案 0 :(得分:1)

我担心保留这种格式会比按照我的建议将表格分成两部分更复杂。如果您坚持保留当前架构,那么我建议您查询该行,组织应用程序代码中的字段,然后对数据库执行更新。

您也可以尝试使用SQL UNION运算符为您提供数字列表,默认情况下UNION将删除所有重复的行:

SELECT Name, Tel FROM 
  (SELECT Name, Tel0 AS Tel FROM Person UNION 
   SELECT Name, Tel1 FROM Person UNION
   SELECT Name, Tel2 FROM Person) ORDER BY Name ;

哪个应该给你一个这样的结果集:

John|1
John|2

然后,您必须逐步执行结果集并将每个数字保存到一个单独的变量中(跳过那些不存在的变量),直到" Name"现场变化。

Tel1 := Null; Tel2 := Null;
Name := ResultSet['Name'];
Tel0 := ResultSet['Tel'];
ResultSet.Next();
if (Name == ResultSet['Name']) {
  Tel1 := ResultSet['Tel'];
} else {
  UPDATE here.
  StartAgain;
}
ResultSet.Next();
if (Name == ResultSet['Name']) {
  Tel2 := ResultSet['Tel'];
} else {
  UPDATE here.
  StartAgain;
}

我不建议你这样做,使用关系数据库是非常糟糕的,但是一旦用真实语言实现并调试它应该有效。