2016-01-03 77 views
0

我試圖計算表的行數,其中date =另一個表中的日期。這個查詢的結果我想插入另一個表的行中,其中日期等同於用於統計相關行數的日期。SQLite - 插入到myTable選擇計數(*)從myTable哪裏日期='mydate'語法錯誤

我發現這個線程是有幫助的: 的Select Count(*) function works

但是當我去插入伯爵表標記列,沒有插入發生,也不是一個錯誤。

我的實際代碼:

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

有一個名爲SpiralUniverse表,並命名爲SpiralUniverse內LookUpWrkflwTemp列。

我的最終目標是在LookUpWrkflwTemp(Date)中添加一個日期,然後在各種表中執行與該日期匹配的記錄計數,並將這些值插入以這些表命名的相應列中。上面的代碼片段用於插入一列,日期是硬編碼的。

ex。 LookUpWrkflwTemp(Date,ImportDailyList,SpiralUniverse,...)是我希望在匹配的日期行中插入記錄計數值的表和列。 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 
... 

SQLite不生成語法錯誤,也沒有正確地插入記錄計數,即使SELECT COUNT(*)函數正常工作。我懷疑問題出在INSERT INTO或WHERE子句中。

+0

所以,你想插入一個行到一個臨時表,其中計數列來形成另一個表,對吧?就這樣? – golddragon007

+0

不是。該表是持久表,count列來自另一個表,其中日期與持久表中的日期相匹配。 – phreshsprout

+0

您是否可以爲「LookUpWrkflwTemp」和「SpiralUniverse」以及其他涉及的表格添加示例數據,還包括您希望獲得的結果? – zedfoxus

回答

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是自動增量,在其他列具有缺省值或可空值。

如果您將該日期放入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 

現在我清空了標籤表和我remov編輯從ID列的PrimaryKey和自動增量值,也該列具有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數據庫,你可以運行代碼。我用這個應用程序試過這些代碼,它也顯示了sqlite異常。

+0

謝謝您的深入回覆。最後一部分是在查詢中傳遞日期值而不是硬編碼日期。 「 」如果將該日期放入LookUpWrkflwTemp表中,也可以插入一個新行,但在這種情況下,您將有兩行,它們具有相同的日期,也可以更新行。 感謝您的遠見。在你的這個例子中,如果我想要搜索一個日期以傳遞到查詢中並存儲爲LookUpWrkflwTemp中的值,那麼WHERE子句中的語法是什麼?換句話說,只包含新日期的行,所有其他值都爲空。 – phreshsprout

+0

我爲Firefox使用SqliteBrowser。它不會像我以前看到的那樣給出錯誤。我相信你說的是正確的,然而在我的情況下,沒有錯誤也沒有插入(用我的代碼)。 – phreshsprout

+0

在我的示例中,count列是標記中的名稱,所以我需要這樣做:WHERE name IS NULL也是,如果您對多列感興趣:WHERE column1 IS NULL AND column2 IS NULL ....這將導致這些行,在我的標記表中沒有count()值 – golddragon007