確定在一個查詢中重複的更新,我有我想要生成將結合基於某種邏輯輸入SQL查詢。我最終需要這個級聯,但是我遇到了一些問題,這些問題比我想要的要多。MySQL的 - SQL - 如何避免
讓我們看看我能不能舉例說明。我有一個表:
CREATE TABLE IF NOT EXISTS doc_lines ( id bigint(20) NOT NULL AUTO_INCREMENT, file_id bigint(20) NOT NULL, line int(4) NOT NULL, end_line int(4) NOT NULL,type
VARCHAR(100),text
VARCHAR(5120) NOT NULL, PRIMARY KEY (id), UNIQUE KEY file_id (file_id,line);INSERT INTO doc_lines VALUES(1,1,1,1,NULL, 'abcdefg'); INSERT INTO doc_lines VALUES(1,1,2,2,NULL, 'hijkl'); INSERT INTO doc_lines VALUES(1,1,3,3,NULL, 'mn'); INSERT INTO doc_lines VALUES(1,1,4,4,NULL, 'op'); INSERT INTO doc_lines VALUES(1,1,5,5,NULL, 'qrs'); INSERT INTO doc_lines VALUES(1,1,6,6,NULL, 'tuv.'); INSERT INTO doc_lines VALUES(1,1,7,7,NULL, 'wxy'); INSERT INTO doc_lines VALUES(1,1,8,8,NULL, 'zab');
我想的價值觀相結合的「文本」時,兩條線在一排匹配特定條件。
例如我現有的查詢是類似以下內容:
UPDATE doc_lines AS a JOIN doc_lines AS b ON a.file_id = b.file_id AND a.end_line + 1 = b.line SET a.end_line
= b.end_line
, b.type
="DELETE", a.text
=CONCAT(a.text
, " ", TRIM(b.text
)) WHERE b.text
REGEXP '^[a-z]$';
然後我和一個跟進:
DELETE from doc_lines WHERE 'type'="DELETE";
我遇到的問題是,1號線的匹配線2,其標誌線2條刪除。 ... 第2點的匹配線3,其標誌線3爲刪除... 第3點的匹配線4,該線標誌4,用於刪除... 等
結果我最終刪除更線比我想要的。
起初,我以爲我能做到這一點,使其跳過所有其他行:
UPDATE doc_lines AS a JOIN doc_lines AS b ON a.file_id = b.file_id AND a.end_line + 1 = b.line SET a.end_line
= b.end_line
, b.type
="DELETE", a.text
=CONCAT(a.text
, " ", TRIM(b.text
)) WHERE b.text
REGEXP '^[a-z]$' AND a.type
<> "DELETE";
但在查詢一個條目的更新似乎並沒有生效,直到查詢完成後,作爲因此上面沒有任何的表現不同......
,因爲我以爲,結果「好了,爲什麼不處理所有的奇數行,然後所有偶數?」,所以我更新我的查詢恰當:
UPDATE doc_lines AS a JOIN doc_lines AS b ON a.file_id = b.file_id AND a.end_line + 1 = b.line SET a.end_line
= b.end_line
, b.type
="DELETE", a.text
=CONCAT(a.text
, " ", TRIM(b.text
)) WHERE b.text
REGEXP '^[a-z]$' AND a.line
% 2=0;
這個問題,我需要多次運行查詢,因爲最終我想要1-6行組合和7-8(使用我的例子)。隨後的每個呼叫都會將行與行後的行結合起來。
這樣做的問題是,最終我最終擊中了同樣的情況,與我原來的查詢,我的一些標記線刪除這也被用來標記其他線路爲刪除。
即使我最終旋轉的奇數和偶數的行,或ID,或該end_line,在某一點似乎最終被重疊。
任何想法?有沒有辦法處理數據庫中的其他條目,而不是基於其實際值?
目標是將任意數量的行的文本字段連接起來,這些行形成一個line-> end_line-> line .. chain?或者只是成對連接? –