簡體   English   中英

你如何將這3個mySQL查詢合並為一個?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM