1

我有一个类似于下面给出的 SQLite 数据库表

Name   | Surname | AddrType | Age | Phone
John   | Kruger  | Home     | 23  | 12345
Sarah  | Kats    | Home     | 33  | 12345
Bill   | Kruger  | Work     | 15  | 12345
Lars   | Kats    | Home     | 54  | 12345
Javier | Roux    | Work     | 45  | 12345
Ryne   | Hutt    | Home     | 36  | 12345

我想为表中的每一行选择与相同“姓氏”值匹配的名称值。

例如,对于第一行,查询将是“从 myTable 中选择名称,其中 Surname='Kruger'”,而对于第二行,查询将是“从 myTable 中选择名称,其中 Surname='Kats' 等等......

是否可以遍历整个表并选择所有这样的值?

PS:我将在 C++ 应用程序中使用这些方法,另一种方法是使用 sqlite3_exec() 并逐行处理每一行。我只想知道是否有任何其他可能的方法可以使用相同的方法。

4

2 回答 2

0

基本上,您只想排除任何没有好友的记录。

像加入表格这样简单的东西应该可以工作:

SELECT a.Name 
FROM tab AS a
JOIN tab AS b 
    ON a.Surname = b.Surname;

如果发生率很高(并且对于所有数据集总是很高),只需返回完整的排序表并自己进行重复检查可能会更快。不过,这将是一个非常强大的假设。

SELECT Name
FROM tab
SORT BY Surname;
于 2012-12-07T16:51:07.070 回答
0

我会做:

sqlite> SELECT group_concat(Name, '|') Names FROM People GROUP BY Surname;
Names
----------
Ryne
Sarah|Lars
John|Bill
Javier

然后使用“|”在 C++ 中拆分“名称”的每个值 分隔符(或您在 group_concat 函数中选择的任何其他分隔符。

于 2012-12-07T16:53:25.373 回答