2015-11-27 41 views
-1

我有兩個不同的表table_usernames和jos_users,我需要匹配字段用戶名和用戶從這兩個表列,然後如果列行匹配我需要表-usernames(註冊日期)列複製到jos-users(註冊)列的行字段。到目前爲止,我已經找到了最接近的事是Mysql不同的表,複製,匹配字段,但列的行是隨機的

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

但是,這並不像它會在我的情況下工作,只是想驗證之前,我毀了我的數據庫,找到我的備份已損壞...謝謝你提前

+0

驗證如果你不用「無論」等替換實際的列名和表名,那肯定會有所幫助,你不覺得嗎? – fancyPants

回答

2

根據您的要求,你有兩個表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表的註冊coulmn。

0

從你的描述的語句應該

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

inner join作品已經作爲匹配用戶名的過濾器。有關連接的視覺解釋,請訪問link

如果你想先檢查一下,如果你的說法是正確的,要麼你把它轉變爲選擇第一,所以你可以看到,該記錄將被更新

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...檢查(在同一會話!)如果一切正常。當你做

COMMIT; 

,如果你不希望它被寫做,你做

ROLLBACK; 

檢查你的表正使用InnoDB作爲存儲引擎與

SHOW CREATE TABLE your_table_name\G 
的數據將被寫入

,看到最後一行

) ENGINE = InnoDB ... 
相關問題