【问题标题】:SQLite, selecting values having same criteria (throughout all table)SQLite,选择具有相同标准的值(在所有表中)
【发布时间】:2012-11-25 13:33:44
【问题描述】:

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

【问题讨论】:

  • 查询结果应该如何?请举个例子。

标签: sql database sqlite conditional-statements


【解决方案1】:

我愿意:

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

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

【讨论】:

  • 谢谢.... 如果我想将这些值插入新列怎么办?例如,如果我有一个额外的列(比如 JoinNames)并且我想在 Surname = Kruger 的这一列中插入“John,Bill”?
  • new 表或 same 表的新列?如果是同一张表,您是否希望 Surname = 'Kruger' 的每一行都具有 same JoinNames 值 'John,Bill'?
【解决方案2】:

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

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

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

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

SELECT Name
FROM tab
SORT BY Surname;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2011-10-17
    • 1970-01-01
    • 2013-09-20
    • 2013-11-10
    • 2018-07-09
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多