数据库查询与编程语言,以检查数据中是否出现

时间:2011-09-15 22:50:51

标签: sqlite

我有一个包含名字和姓氏的数据库。 我选择其中一些,而不是全部。 我想显示姓氏,但有一个例外,当当前选择中的两个人的姓氏相同时,在名字的首字母后面加上句号空格。 (G.

该应用程序正在移动设备上运行,因此我担心循环访问数据并将每个名称与所有其他名称进行比较(对于内部名称)太昂贵了。

是否可以在查询中检查这一点并执行case语句,其中我将名字的substr连接到.

我该怎么做?

谢谢。

2 个答案:

答案 0 :(得分:2)

以下SQL查询显示了如何实现此目的。

select firstname, lastname from employee;
 firstname | lastname 
-----------+----------
 Fred      | Bloggs
 Joe       | Citizen
 Bill      | Citizen
 Andrew    | Smith


select case when (select count(*) from employee E where E.Lastname=E2.Lastname) > 1 then substr(firstname, 1, 1) || '. ' else '' end || lastname from employee E2;
  ?column?  
------------
 Bloggs
 J. Citizen
 B. Citizen
 Smith

在lastname列上有一个索引会有所帮助,这样子查询就更有效了。

答案 1 :(得分:1)

我认为你会发现这样效率较低,而且可能在SQL中更难做,因为SQL没有提供任何检查相邻行的工具:你必须执行子查询,或者每行都要连接一次,以便看看是否有其他一行具有相同的姓氏。

只要您一次只处理一页结果(您说过)并按姓氏排序,就可以通过存储单行并“向前看”到下一行来处理重复的姓氏。这不应该在客户端需要太多内存。但是,您应该再请求一个比您想要显示的结果更多的结果,以确保下一页上的第一个结果与此页面上的最后一个结果不同。