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