簡體   English   中英

MySQL不同的表,復制過來,匹配字段,但列行是隨機的

[英]Mysql different tables, copy over, match field, but column rows are random

我有兩個不同的表table_usernames和jos_users,我需要匹配兩個表列中的用戶名和用戶字段,然后如果該列行匹配,我需要將表用戶名(注冊日期)列復制到jos-users(注冊)列行字段。 到目前為止,我發現的最接近的東西是

update
  table1 t1
  join table2 t2 on t2.field = t1.field
set
  t1.field1 = t2.matchingfield
where
  t1.whatever = t2.whatever

但這似乎無法在我遇到的情況下起作用,只是想在銷毀數據庫並發現備份損壞之前進行驗證...預先謝謝

根據您的要求,您有兩個表table_usernames和jos_users。

現在,首先我必須找到這兩個表的映射,您已經在table_usernames中定義了用戶名,並在jos_users中定義了用戶。

現在,您想將table_usernames的最糟糕的日期設置為jos_users的注冊字段。

UPDATE table_usernames t1,
           jos_users t2
    SET t2.registration = t1.registered_date // assign registered_date value to registration column of jos_users table 
    WHERE (t1.username = t2.users);   // Mapping (Common) Columns of both tables

這將從table_usernames表更新jos_users表的注冊行。

根據您的描述,聲明將是

UPDATE table_usernames t1
INNER JOIN jos_users t2 ON t1.username = t2.users
SET t2.registration = t1.registered_date;

inner join已作為匹配用戶名的過濾器。 有關連接的直觀說明,請訪問此鏈接

如果要先檢查,如果語句正確,則可以先將其轉換為選擇語句,這樣就可以看到哪些記錄將被更新。

SELECT * FROM 
table_usernames t1
INNER JOIN jos_users t2 ON t1.username = t2.users;

或者,如果您使用的存儲引擎支持所有表的事務,例如InnoDB,則可以執行以下操作:

START TRANSACTION;
UPDATE table_usernames t1
INNER JOIN jos_users t2 ON t1.username = t2.users
SET t2.registration = t1.registered_date;

然后,您可以使用SELECT whatever...檢查SELECT whatever... (在同一會話中!),如果一切順利。 數據將在您執行時寫入

COMMIT;

如果您不希望它被編寫,您可以

ROLLBACK;

檢查您的表是否使用InnoDB作為存儲引擎

SHOW CREATE TABLE your_table_name\G

並在最后一行看到

) ENGINE = InnoDB ...

暫無
暫無

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

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