我试图计算一个表的行数,其中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子句中。
答案 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异常。