SQLite - 插入myTable选择Count(*)from myTable Where Date =' mydate'语法错误

时间:2016-01-03 22:33:18

标签: sqlite

我试图计算一个表的行数,其中date =另一个表中的日期。我希望将此查询的结果插入到另一个表的行中,其中日期等于用于计算要计数的相关行的日期。

我找到了这个有用的帖子: Select Count(*) function works

然而,当我将Count插入到表格标记的列时,没有插入发生也没有错误。

我的实际代码:

INSERT INTO "main"."LookUpWrkflwTemp" (SpiralUniverse)
   SELECT Count (*)
   FROM SpiralUniverse 
   WHERE Date = '2015-11-16';

有一个名为SpiralUniverse的表和LookUpWrkflwTemp中名为SpiralUniverse的列。

我的最终目标是向LookUpWrkflwTemp(Date)添加日期,然后在各种表中执行与该日期匹配的记录计数,并将这些值插入到以这些表命名的相应列中。上面的代码段用于插入一列,日期是硬编码的。

离。 LookUpWrkflwTemp(Date,ImportDailyList,SpiralUniverse,...)是我想要在匹配的Date行中插入记录计数值的表和列。 ImportDailyList和SpiralUniverse是我想要搜索日期匹配记录计数的不同表。

上述代码段中的语法中缺少什么?

编辑:

Sample data for LookUpWrkflwTemp(Date,ImportDailyList,SpiralUniverse,...)
rowid   Date        ImportDailyList   SpiralUniverse
1     2015-11-15        null               1
2     2015-11-16        null               4    <---record count and insert                           into this table that I´m looking for



Sample data for SpiralUniverse
rowid   Date         Symbol
1     2015-11-16     ACOR
2     2015-11-16     COR
3     2015-11-16     AAPL
4     2015-11-16     TSLA
5     2015-11-15     TSLA
...

即使Select Count(*)函数正常工作,sqlite也不会生成语法错误,也不会正确插入记录计数。我怀疑问题出在INSERT INTO或WHERE子句中。

1 个答案:

答案 0 :(得分:1)

如果要在该表中插入新记录:

INSERT INTO "main"."LookUpWrkflwTemp" (Date, SpiralUniverse) VALUES('2015-11-16', (
   SELECT Count (*)
   FROM SpiralUniverse 
   WHERE Date = '2015-11-16');

OR

INSERT INTO "main"."LookUpWrkflwTemp" (Date, SpiralUniverse)
   SELECT '2015-11-16', Count (*)
   FROM SpiralUniverse 
   WHERE Date = '2015-11-16';

在这种情况下,只有你的rowid是自动增量而其他列有默认值或者可以是NULL。

如果您在LookUpWrkflwTemp表中有该日期,您也可以插入一个新行,但在这种情况下,您将有两行,它们具有相同的日期。你也可以UPDATE你的行。

UPDATE "LookUpWrkflwTemp" SET SpiralUniverse = (
  SELECT Count (*)
  FROM SpiralUniverse 
  WHERE Date = '2015-11-16') WHERE Date = '2015-11-16'; -- or by rowid = x where x is the correct rows rowid

此外,您可以从不同的表中插入多个计数:

INSERT INTO "main"."LookUpWrkflwTemp" (Date, ImportDailyList, SpiralUniverse) VALUES('2015-11-16', (
   SELECT Count (*)
   FROM ImportDailyList 
   WHERE Date = '2015-11-16'), (
   SELECT Count (*)
   FROM SpiralUniverse 
   WHERE Date = '2015-11-16');

仅当您要引用另一个数据库时,"main".才是必需的。

例如我的db: 标签(id,名称,日期) 文件(id,收藏,添加,......) 两种情况下,ID都是PrimaryKey并且是自动增量。

文件数据:

id  favorite    date
1       0       2015-11-30 23:25:44
2       1       2015-11-30 23:25:44
3       1       2015-11-30 23:25:44
4       0       2015-11-30 23:25:44
5       0       2015-11-30 23:40:17

标签表空

在这种情况下:

Query executed successfully:
INSERT INTO "tags" (name) 
  SELECT count (*) FROM files
  WHERE added = '2015-11-30 23:25:44' (took 0ms)

Tags table:
id  name    date
1   4       NULL

Query executed successfully: 
INSERT INTO "tags" (name, date) 
  SELECT count (*), '2015-11-30 23:25:44' FROM files
  WHERE added = '2015-11-30 23:25:44' (took 0ms)

Tags table:
id  name    date
1   4       NULL
2   4       2015-11-30 23:25:44

Query executed successfully: 
INSERT INTO "tags" (name, date) 
  SELECT count (*), '2015-11-30 23:25:44' FROM files
  GROUP BY favorite (took 0ms)


Tags table:
id  name    date
1   4       NULL
2   4       2015-11-30 23:25:44
3   3       2015-11-30 23:25:44
4   2       2015-11-30 23:25:44

Query executed successfully: 
INSERT INTO "tags" (name, date) 
  SELECT count (*), added FROM files GROUP BY favorite, added (took 0ms)

Tags table:
id  name    date
1   4       NULL
2   4       2015-11-30 23:25:44
3   3       2015-11-30 23:25:44
4   2       2015-11-30 23:25:44
5   2       2015-11-30 23:25:44
6   1       2015-11-30 23:40:17
7   2       2015-11-30 23:25:44

最后一次更新:

Query executed successfully: 
UPDATE tags SET name = (
  SELECT count (*) FROM files WHERE added = '2015-11-30 23:25:44') 
WHERE date = '2015-11-30 23:25:44' (took 0ms)

Tags table:
id  name    date
1   4       NULL
2   4       2015-11-30 23:25:44
3   4       2015-11-30 23:25:44
4   4       2015-11-30 23:25:44
5   4       2015-11-30 23:25:44
6   1       2015-11-30 23:40:17
7   4       2015-11-30 23:25:44

现在我清空了tags表,我从id列中删除了primarykey和autoincrement值,这个列也有NOT NULL属性: 然后我尝试运行:

INSERT INTO "tags" (name) 
  SELECT count (*) FROM files
  WHERE added = '2015-11-30 23:25:44'

我明白了:

NOT NULL constraint failed: tags.id: INSERT INTO "tags" (name) 
  SELECT count (*) FROM files
  WHERE added = '2015-11-30 23:25:44'

同时试用SqliteBrowser(http://sqlitebrowser.org/)它很有用,你可以打开sqlite DB并运行代码。我用这个应用程序尝试了这些代码,它也显示了sqlite异常。

相关问题