【问题标题】:SQLite: How to retrieve data from column in one table using SELECT to insert retrieved data in another tableSQLite:如何使用 SELECT 从一个表中的列中检索数据以将检索到的数据插入另一个表中
【发布时间】:2020-12-14 13:58:28
【问题描述】:

我正在尝试使用 SQLite 从主表 (mutants.info) 中检索数据,并将该表中的数据插入到辅助表 (mutants.teams) 中。主表有多个列,但我只对从中检索数据感兴趣,称为“团队”。我的目标是让脚本从“团队”字段/列中检索数据并将该数据插入到辅助表中,然后计算某个团队名称出现在该字段中的次数。

我编写了以下 SQLite 脚本,但它没有按照我想要的方式填充辅助表。

INSERT OR REPLACE INTO "mutants.teams" (team,members) Values(
(SELECT team FROM "mutants.info"),
(SELECT COUNT(*) FROM "mutants.info" WHERE team = (SELECT team FROM "mutants.info"))
);

当我尝试运行此脚本时,它会使用在主表的“团队”列中看到的第一个“团队名称”填充辅助表,但不会填充存在于“团队”字段。如何让这个脚本拉入出现在“团队”列中的其他“团队名称”?

表配置如下:

+-----------------------------------------------------------+
|                           main                            | 
+-----------------------------------------------------------+
|id |mutant  |powers             |team         |location    |   
+-----------------------------------------------------------+
|1  |Veto    |Psionic            |Ninjas       |China       |    
+-----------------------------------------------------------+
|2  |Wrecker |Enhanced Strength  |The Crew     |Chicago     |   
+-----------------------------------------------------------+
|3  |Atlas   |Godlike Powers     |The Gods     |Heaven      |   
+-----------------------------------------------------------+
|4  |Aria    |Sonic Energy Powers|The Crew     |Chicago     |
+-----------------------------------------------------------+
 
+-----------------------+
|       secondary       |
+-----------+-----------+
| team      | members   |
+-----------+-----------+
| The Crew  | 13        |
+-----------+-----------+
| Ninjas    | 27        |
+-----------+-----------+
| The Gods  | 127       |
+-----------+-----------+
| Chosen    | 600       |
+-----------+-----------+

脚本的目标是从主表中的团队字段中检索数据,并使用该信息填充第二个表,然后计算团队名称在主表中出现的次数。

我很难获得正确的编码来从第一个表中检索这些数据并将其插入到第二个表中。如果有人可以帮助我解决此问题,我将不胜感激。

【问题讨论】:

标签: sql sqlite count sql-insert


【解决方案1】:

我怀疑你想要的是这样的:

INSERT INTO "mutants.teams" (team, members)
SELECT team, COUNT(*) 
FROM "mutants.info"
GROUP BY team

此查询从 "mutants.info" 中选择所有(不同的)团队名称,并将它们插入到 "mutants.teams" 中,其中每个团队出现在 "mutants.info" 中的次数。

我不知道您为什么在代码中使用 INSERT OR REPLACE 而不仅仅是 INSERT
如果"mutants.teams" 中已经有行,并且如果团队名称存在唯一约束违规,您希望它们被新行替换,那么很好。

【讨论】:

  • 是的,表上有独特的约束,因此需要使用“插入或替换”。谢谢您的帮助。修改上述内容后,我的表工作正常。再次,非常感谢您在此问题上提供的帮助。
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2016-08-22
  • 2011-08-26
相关资源
最近更新 更多