簡體   English   中英

根據主鍵將丟失的記錄添加到mysql表中

[英]Add missing records into mysql table based on primary key

我有一個帶有成員的mysql表,大約有1400條記錄,並且我要切換到新的成員資格軟件(amember v3到amemberv4)。 問題在於amember v4是一個全新的程序,因此數據庫表不能缺少任何記錄,否則它將基於主鍵重新排序。 例如,成員表中的會員ID與產品表中的產品ID相關聯。 有一個事實表引用了此維度。

我的問題是如何在空記錄中添加缺少的起始成員身份ID。 例如,該表以成員資格ID 4而不是1,2,3開頭。 我需要幫助,以找到一種解決方案來根據丟失的會員ID添加這些丟失的記錄。 我確實根據第一個表(membersold,成員)制作了第二個表,因為我確定我需要彼此連接以創建更新語句以添加那些丟失的記錄。 大約有7列只是空值。

有任何想法嗎?

首先:揚·德沃拉克(Jan Dvorak)和邁克爾·伯科夫斯基(Michael Berkowski)所說的都是絕對正確的。 因此, 請仔細檢查您是否確實需要此hack,因為您可能不需要

但是,以防萬一,只是為了簡單起見,這會將所有ID插入表中-前提是它們是主鍵,並且尚不存在。

幾乎所有其他方法都更好(除了可能需要手動完成),但是需要使用MySQL或其他語言的過程。

-- insert IDs from 1 to 1701, plus another field "otherfield" with value "othervalue"
-- The maximum ID here is about 2400, but you said you needed at most 1400.
-- And you can add 1000 instead of 1 to the value of 'id' and run it again
-- to insert ids from 1000 to 2701 :-)

INSERT IGNORE INTO yourtable
      (id, otherfield)
SELECT id, 'othervalue'
FROM (
    SELECT 1+a.x+b.x*7+c.x*49+d.x*343 AS id FROM
    ( SELECT 0 AS x UNION SELECT 1 UNION SELECT 2 UNION
      SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 ) AS a
    JOIN
    ( SELECT 0 AS x UNION SELECT 1 UNION SELECT 2 UNION
      SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 ) AS b
    JOIN
    ( SELECT 0 AS x UNION SELECT 1 UNION SELECT 2 UNION
      SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 ) AS c
    JOIN
    ( SELECT 0 AS x UNION SELECT 1 UNION SELECT 2 UNION
      SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 ) AS d
   ) AS generated
WHERE generated.id < 1701;

如我所說,這是做事的非常丑陋的方式。

如果您有任何可用的語言,則可以生成插入查詢並運行它們,例如在bash中運行:

( for id in $( seq 1 1400 ); do
    echo "INSERT IGNORE INTO mytable ( id, otherfield ) VALUES ( $id, 'hello' );"
done ) | mysql databasename

或使用PHP,python或Perl-您只需生成以下形式的SQL INSERT語句

INSERT IGNORE INTO mytable ( id ) VALUES ( ... );

並用遞增計數器填充空格,然后將語句發送到數據庫。 IGNORE將跳過已經存在的值。 如何填補空白取決於您選擇的語言。 如果需要填充其他字段,請在id后面輸入名稱,並在空格后面輸入其默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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