将行中的值写入另一行和列

时间:2016-05-03 10:43:50

标签: sql sqlite

我正在努力"结婚"我的DB中有两个想象中的人。我想要做的是选择一定年龄范围内的人,然后在一列中写下彼此的ID。

如果这是我的表

ID | sex | age | married to
 1 | M   | 25  | NULL
 2 | F   | 28  | NULL
 3 | M   | 75  | NULL

结果应如下所示:

ID | sex  | age | married_to
 1 | M    | 25  | 2
 2 | F    | 28  | 1
 3 | M    | 75  | NULL

我知道select语句应该是这样的:

SELECT ID FROM table WHERE age BETWEEN ageMin AND ageMax AND married_to IS NULL

但我不知道如何让SQLite在右栏中编写ID。特别是如何在具有大约150k条目的DB中进行此工作。对我来说,棘手的部分是在没有超级慢程序的情况下始终只写入一行。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

首先,您需要捕获两个ID。一人为A人,一人为B人,为已婚人士。

接下来,您需要在拥有ID后执行两次更新查询:

  1. 更新人A"与#34;结婚与同等人B的身份证明
  2. 更新B"与#34;结婚与同等人A的身份证明
  3. SQLite允许您select a random row

    SELECT ID FROM table WHERE age BETWEEN ageMin 
          AND ageMax AND married_to IS NULL ORDER BY RANDOM() LIMIT 1
    

    您可以执行此操作两次,检查以确保ID是分开的,然后执行更新查询。

    UPDATE table SET married_to = Person_B_ID WHERE ID = *Person A's ID*
    

    UPDATE table SET married_to = Person_A_ID  WHERE ID = *Person B's ID*
    

    您可以多次运行此查询序列。但是,RANDOM()的性能可能不适合大型数据库。如果是这种情况,您可能需要运行查询以获取需要结婚的人的所有ID,然后使用其他编程语言将其匹配。然后,您可以自动生成更新查询到"结婚"数据库中的对。