Sqlite 在INSERT INTO语句中运行COUNT时遇到问题

Sqlite 在INSERT INTO语句中运行COUNT时遇到问题,sqlite,Sqlite,我很难理解这句话。它的思想是用数据库中每个播放器的一行值初始化一个表,但我无法从满是搜索选项卡的浏览器中找出我做错了什么。我只知道我的语法显然是垃圾 INSERT INTO tblKebabs (TransactionID, PlayerID, Amount, Description, Timestamp) SELECT (COUNT(tblPlayers.PlayerID)) AS TransactionID, tblPlayers.PlayerID AS PlayerID,

我很难理解这句话。它的思想是用数据库中每个播放器的一行值初始化一个表,但我无法从满是搜索选项卡的浏览器中找出我做错了什么。我只知道我的语法显然是垃圾

INSERT INTO tblKebabs 
  (TransactionID, PlayerID, Amount, Description, Timestamp) 
SELECT 
  (COUNT(tblPlayers.PlayerID)) AS TransactionID,
  tblPlayers.PlayerID AS PlayerID,0 as Amount,
  "Initializer" as Description,"now" AS Timestamp) 
FROM tblPlayers 
WHERE tblPlayers.PlayerID > 0;

我不知道你想在这里做什么,但如果只是为了计数,试试这个

ROW_NUMBER() OVER(ORDER BY tblPlayers.PlayerID) AS TransactionID
如果希望TransactionID列自动递增,则必须在CREATE语句中定义它。 如果您已经将其定义为整数主键,那么它已经是自动递增的,您不需要更改某些内容。 如果您没有上述内容,那么您必须使用INTEGER主键为该列重新创建表,因为SQLite不允许使用ALTER进行此类更改。现在,您可以从语句中省略此列:

INSERT INTO tblKebabs 
  (PlayerID, Amount, Description, Timestamp) 
SELECT 
  PlayerID,
  0 as Amount,
  'Initializer',
  CURRENT_TIMESTAMP 
FROM tblPlayers 
WHERE PlayerID > 0;
SELECT语句中不需要别名。
我还使用了当前的时间戳。

你能发布整个声明吗。我要看看你是怎么分组的。有人编辑了这篇文章,破坏了我键入的代码。这不是原来的帖子,信息不见了,谢谢karel。我将不得不重新编辑的问题,使代码是完整的,而不是删除-编辑,谢谢你修复它,这是更好的。TBH,@forpas下面的答案是最好的-我不知道你为什么要在ID字段中输入一个计数-这不是唯一的开始。如果出于某种原因,它确实是您需要的计数,那么您需要按字段分组,以便实际获得一个计数值。我将计数放入ID字段中,因为我是noobcore,一开始不知道如何将整数字段定义为主键。当时这似乎是个好主意:谢谢你。