Sqlite
從另一個表中的數據更新一個表中的值
我有一個使用 SQLite 的應用程序,其中有兩個表一個
master
表和一個scheduled
表。如果我在發生
master
後的某個時間執行查詢,我想用預定表中的值更新表中的值。更新表格後,我想從表格中刪除這些due
值。master``scheduled
想像這是開始狀態:
Table: master id value --- ----- 1 "Buy" 2 "Buy" Table: scheduled key id value due ---- --- ------ ----- 1 1 "Sell" 2018-01-01 12:01:00 2 2 "Sell" 2018-01-01 12:01:00 3 1 "Buy" 2019-02-02 13:00:00
我正在嘗試製作一個查詢,如果我在之後執行它
2018-01-01 12:01:00
,我想看看:Table: master id value --- ----- 1 "Sell" 2 "Sell" Table: scheduled key id value due ---- --- ------ ----- 3 1 "Buy" 2019-02-02 13:00:00
我是新的 SQLite,我得到的最接近的是以下內容:
UPDATE master SET value = (SELECT scheduled.value FROM scheduled WHERE scheduled.id = master.id) WHERE EXISTS (SELECT * FROM scheduled WHERE scheduled.due >= ?);
不幸的是,這似乎不起作用,我什至不確定從
DELETE
.
為了回答問題的第一部分,我做了以下事情:
創建了兩個表:
CREATE TABLE master ( m_id INTEGER, m_value VARCHAR(4) ); CREATE TABLE scheduled ( key INTEGER, s_id INTEGER, s_value VARCHAR(4), due TIMESTAMP );
添加了一些記錄:
INSERT INTO master VALUES (1, 'Buy'); INSERT INTO master VALUES (2, 'Buy'); INSERT INTO scheduled VALUES (1, 1, 'Sell', '2018-01-01 12:00:00'); INSERT INTO scheduled VALUES (2, 2, 'Sell', '2018-01-01 12:00:01'); INSERT INTO scheduled VALUES (3, 1, 'Buy', '2019-01-01 12:00:00');
然後我執行了以下查詢:
UPDATE master SET m_value = ( SELECT s_value FROM scheduled s WHERE s_id = m_id AND due <= CURRENT_DATE );
SELECT * FROM master
之後的結果UPDATE
:m_id m_value 1 Sell 2 Sell
您可以在此處的 dbfiddle 上找到所有這些內容。下次您提出問題時,您可能會發現為那些試圖解決您的問題的人設置一個 dbfiddle 是有益的 - 幫助我們幫助您!
順便說一句,SQLite(與其他系統不同)不支持
UPDATE
s 和JOIN
s。我不確定標準對使用這些內容有何規定,但這是您使用連接完成的範例。UPDATE master SET m_value = s.s_value FROM master m JOIN scheduled s ON m.m_id = s.s_id WHERE s.due <= NOW();
要回答問題的第二部分,請將所有工作(兩個單獨的語句)合二為一(此處
TRANSACTION
的文件,此處的範例)。不幸的是,dbfiddle 似乎不支持這一點。 但是,我們很幸運,這個 db-fiddle(注意連字元!)確實支持s - 請在此處查看您問題的完整答案。如果我的解決方案對您沒有幫助,請告訴我。TRANSACTION