我有一个类似于下面给出的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值。
例如,对于第一行,查询将是"select Name from Kruger where Surname=‘myTable’“,而对于第二行,查询将是"select Name from Kats where Surname='Kats‘an....”。
是否可以遍历整个表并像这样选择所有值?
PS :我将在C++应用程序中使用这些方法,另一种方法是使用sqlite3_exec()并逐行处理。我只想知道,对于同样的方法,是否还有其他可能的方法。
发布于 2012-12-08 00:53:25
我会这么做:
sqlite> SELECT group_concat(Name, '|') Names FROM People GROUP BY Surname;
Names
----------
Ryne
Sarah|Lars
John|Bill
Javier然后在C++中使用"|“分隔符(或在group_concat函数中选择的任何其他分隔符)拆分"Names”的每个值。
发布于 2012-12-08 00:51:07
基本上,您只想排除没有伙伴的任何记录。
一些简单的事情,比如针对表本身的连接表应该是有效的:
SELECT a.Name
FROM tab AS a
JOIN tab AS b
ON a.Surname = b.Surname;如果发生率很高(并且对于所有数据集来说总是很高),那么只返回完整的排序表并自己进行重复检查可能会更快。不过,这将是一个相当有力的假设。
SELECT Name
FROM tab
SORT BY Surname;https://stackoverflow.com/questions/13761964
复制相似问题