如何将一行链接到另一个表上的一行?

时间:2016-06-02 19:14:02

标签: mysql sql database

我在这里有点奇怪的情况,我无法改变数据库结构,所以请不要提及。

我有两个名为users和forum_users的表。 '用户' table有两行:user_id(primary),username。 ' forum_users' table有三行:id(主要),forum_user_id,forum_username。

假设我们的用户的user_id为' 23'。此用户已自动添加到forum_users表中,其ID为' 1',forum_user_id为' 23'以及随机的forum_username。 我想要完成的是,我想要' forum_username'数据要更新为'用户名'条目数据' user_id'等于' forum_user_id'。

我该如何完成此操作?这可以通过MySQL完成而不使用任何类型的外部脚本吗?如果没有,那么我如何制作这样的剧本?

示例数据库:http://pastebin.com/ZYf8baV3

这里是我需要的快速绘图: Drawing

2 个答案:

答案 0 :(得分:1)

听起来你想要一个触发器

MySQL触发器是与表关联的数据库对象。当为表执行定义的操作时,它将被激活。当您在表上运行以下MySQL语句之一时,可以执行触发器:INSERT,UPDATE和DELETE。它可以在事件之前或之后调用。

使用您提供的数据的快速示例:

CREATE TRIGGER CasscadeUsername_after_update
AFTER UPDATE
ON Users FOR EACH ROW

BEGIN

UPDATE forum_users
SET forum_username = username
WHERE forum_users.user_id = users.user_id

END

以下是教程trigger-syntax

的链接

答案 1 :(得分:0)

要使用相应的forum_user用户名更新用户的所有记录,请尝试使用以下代码

 update user a
    set username = (select forum_user_name  from forum_user b 
where b.forum_user_id=a.user_id);

要仅更新单个记录,例如23,请使用以下更新声明

update user a
set username = (select forum_user_name  from forum_user b
 where b.forum_user_id=23)
where user_id=23;