[英]How do you combine these 3 mySQL queries into one?
我想要做的示意代碼:
INPUT VAR inputOne; (First input of the desired statement)
INPUT VAR inputTwo; (Second input of the desired statement)
INPUT VAR inputThree; (Third input of the desired statement)
-
VAR repResult = getResult("SELECT * FROM `representatives` WHERE `rID` = inputOne LIMIT 1;")
VAR evResult = getResult("SELECT `events`.`eID` FROM `events` WHERE `eventDateTime` = inputTwo LIMIT 1;")
if (repResult != null && evResult != null) {
execureQuery("INSERT INTO `votes` (`representatives_rID`, `events_eID`, `voteResult`) VALUES(inputOne,evResult.eID,inputThree);");
}
當我在單獨的語句中執行它們時,它非常慢,特別是因為需要檢查和插入~1.000.000。 我想知道,如果有任何替代方案,可以采用一種查詢方式。
您可以使用INSERT-SELECT語法來完成此任務:
INSERT INTO `votes` (`representatives_rID`, `events_eID`, `voteResult`)
select inputOne, `events`.`eID`, inputThree FROM `events` WHERE `eventDateTime` = inputTwo LIMIT 1
上面將所有三個參數組合成一個INSERT-SELECT語句,其中select的結果被發送到插入。
請參閱:為select-insert語句插入...值(SELECT ... FROM ...) 。
是的,您可以將這些語句放入1個存儲過程(返回2個結果集並執行1次插入),但不是,這可能無濟於事。 因為3個SQL語句不是很大的網絡流量,並且因為存儲過程在MySQL中很慢。
rID是主鍵嗎? 第一個查詢是否提取了您不需要的大字段?
eventDateTime上有唯一索引嗎? 如果表不是InnoDB,則索引應明確包含eID,因此它將成為覆蓋索引。
制作這些鍵后,您可以刪除LIMIT 1
。
rID和eID數據類型是否盡可能小?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.