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

テーブルの各行に同じ「姓」の値に一致する名前の値を選択したいと思います。

たとえば、最初の行のクエリは「Surname='Kruger' の myTable から名前を選択する」であり、2 行目のクエリは「Surname='Kats' の myTable から名前を選択する」などです。

テーブル全体をトラバースして、そのようなすべての値を選択することは可能ですか?

PS : C++ アプリケーションでこれらのメソッドを使用します。別の方法は、sqlite3_exec() を使用して各行を 1 つずつ処理することです。同じアプローチで他に可能な方法があるかどうかを知りたいだけです。

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++ の「Names」の各値を分割します。区切り記号 (または group_concat 関数で選択した他のもの)。

于 2012-12-07T16:53:25.373 に答える