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