【问题标题】:sqlite query per row每行的sqlite查询
【发布时间】:2011-11-05 13:52:00
【问题描述】:

对 sqlite(和 sql)相当陌生。对于表中的每一行,我想进行查询并附加到另一个表。我目前的计划是提取vector中的所有项目,并为vector中的每个项目调用sqlite。这可以通过单个 sqlite 语句来完成吗?在 C/C++ 中。 提前谢谢你。

编辑:我的一个想法是在新表上创建触发器。对于每个新添加的行,触发器将使用它来查询该行。

例子:

create table Persons(Id, FirstName, LastName);
create table ParentChildren(PersonsIdParent, PersonsIdChild);

为每个人创建一个所有可能的孩子的列表(例如相同的姓氏),并添加到 ParentChildren。

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    是的,你可以在不离开数据库的情况下做这种事情:

    insert into table1 (column11, column12, ...)
    select column21, column22, ...
    from table2
    where ...
    

    只要所选列具有正确的类型,输入 INSERT 的查询可以根据需要尽可能复杂。


    现在我们知道您的表是什么样子了,您只需要将 Persons 连接到自身:

    insert into ParentChildren (PersonsIdParent, PersonsIdChild)
    select p.Id, c.Id
    from Persons p
    join Persons c on p.LastName = c.LastName
    where p.Id <> c.Id
    

    只要您使用唯一别名,您就可以将表连接到自身。需要p.Id &lt;&gt; c.Id 条件以避免试图让某人成为自己的孩子。

    【讨论】:

    • 这部分回答了它。我仍然不知道从 table2 中选择的每行查询的语法。谢谢。
    • @jobobo:也许您可以在问题中包含您的表格和您要选择的内容。
    • 我已经用 Persons 和 ParentChildren 示例更新了上面的问题。再次感谢您。
    【解决方案2】:

    您要问的只是将每个人链接到同一Lastname 的每个其他人(我排除了加入一个自我):

    INSERT INTO PersonsChildren
    SELECT p.Id, c.id
    FROM   Persons p
    JOIN   Persons c USING (LastName)
    WHERE  p.Id <> c.Id
    ORDER  BY 1,2
    

    使用SELECT 查询可以随时检索信息。无需立即在 PersonsChildren 中添加冗余条目。除了有更多的问题..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 2018-05-10
      相关资源
      最近更新 更多