我有一个类似于下面给出的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
我想为表中的每一行选择匹配相同“Surname”值的Name值。
例如,对于第一行,查询将是“从myTable中选择名称,其中Surname ='Kruger'”,而对于第二行,查询将是“从myTable中选择姓名,其中Surname ='Kats',因此a。 ......
是否可以遍历整个表并选择所有这些值?
PS:我将在C ++应用程序中使用这些方法,另一种方法是使用sqlite3_exec()并逐个处理每一行。我只是想知道同样的方法是否还有其他可能的方法。
答案 0 :(得分:0)
基本上你只想排除任何没有好友的记录。
像加入桌子一样简单的事情应该有效:
SELECT a.Name
FROM tab AS a
JOIN tab AS b
ON a.Surname = b.Surname;
如果发生率很高(或者对于所有数据集总是很高),只返回完整的排序表并自己进行重复检查可能会更快。不过,那将是一个相当强烈的假设。
SELECT Name
FROM tab
SORT BY Surname;
答案 1 :(得分:0)
我会这样做:
sqlite> SELECT group_concat(Name, '|') Names FROM People GROUP BY Surname;
Names
----------
Ryne
Sarah|Lars
John|Bill
Javier
然后使用“|”拆分C ++中“Names”的每个值分隔符(或您在group_concat函数中选择的任何其他分隔符。