SQLite,选择具有相同标准的值(在所有表中)

时间:2012-12-07 11:13:12

标签: sql database sqlite conditional-statements

我有一个类似于下面给出的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()并逐个处理每一行。我只是想知道同样的方法是否还有其他可能的方法。

2 个答案:

答案 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函数中选择的任何其他分隔符。