我有两个不同的表table_usernames和jos_users,我需要匹配两个表列中的字段用户名和用户,然后如果列行匹配我需要table-usernames(注册日期)列复制到jos-users (注册)列行字段。到目前为止,我发现最接近的是
update
table1 t1
join table2 t2 on t2.field = t1.field
set
t1.field1 = t2.matchingfield
where
t1.whatever = t2.whatever
但是看起来它不会在我的情况下工作,只是想在我销毁我的数据库之前验证并发现我的备份已损坏...提前谢谢你
答案 0 :(得分:2)
根据您的要求,您有两个表table_usernames和jos_users。
现在首先,我必须找到这两个表的映射,你已经从table_usernames和jos_users的用户定义了用户名。
现在,您要将table_usernames的ragistered日期设置为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表的注册库。
答案 1 :(得分: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 ...