我想創建一個SQL語句(使用sqllite ..所以我不能使用函數,IF語句等),它重用select語句的結果.. this就是它目前看起來像在CASE語句中重用SELECT語句的結果sqllite
INSERT INTO search_email(many_fields, threadid) VALUES ('many_fields',
CASE
WHEN
(
(SELECT COUNT(tableX.threadid) %threadIDquery%
) > 0
)
THEN
(SELECT tableX.threadid %threadIDquery% LIMIT 1)
ELSE
0
END
)
我想要重用結果的第一選擇具有再拍(幾乎相同)select語句來代替。
更新:對於那些想知道什麼,我試圖做的。這裏是查詢的完整版本:
INSERT INTO search_email(meta, subject, body, sender, tos, ccs, folder, threadid) VALUES ('meta1','subject1','body1','sender1', 'tos1',' ccs1','folder1',
CASE
WHEN
(
(SELECT COUNT(search_email.threadID) FROM search_email
WHERE search_email.subject MATCH '%query%' AND
(
(search_email.sender = '%sender' AND search_email.tos = '%receiver%')
OR
(search_email.sender = '%receiver%' AND search_email.tos = '%sender%')
)
) > 0
)
THEN
(SELECT search_email.threadID FROM search_email
WHERE search_email.subject MATCH '%query%' AND
(
(search_email.sender = '%sender%' AND search_email.tos = '%receiver%')
OR
(search_email.sender = '%receiver%' AND search_email.tos = '%sender%')
) LIMIT 1
)
ELSE
//generate new thread ID
END
)
基本上我試圖找出如果電子郵件線程已經存在對於傳入的電子郵件..所以我檢查主題是否匹配,如果是這樣,我檢查電子郵件的發件人和收件人是否匹配(在任一方向)..如果電子郵件線程存在我只是插入相同的電子郵件線程ID ,否則我生成一個新的線程ID
更新2:只是爲了澄清,我正在尋找一種方式來作出相同的兩次搜索保存sqllite編譯器..而不是簡單地節省了輸入(或使其更具可讀性等)
更新3:我在想,如果有此語句返回生成的線程ID的方式當且僅當該線程ID是從質數據庫檢索,而不是生成的..你可以找到答案here
這是試圖做什麼?我可以看到你的答案如何解析數據,但我不認爲它實際上正在做你所需要的。 –
更新的問題,以解決您的意見 – abbood
它是SQL Server或SQLite?您知道,即使您設法將查詢的鍵入保存兩次,查詢也會運行兩次,併產生可能不同的結果,對吧? –